dtziv24262 2013-08-18 21:29
浏览 27
已采纳

.htaccess重写:子域为GET var,路径为GET var

Desired result:

http://example.com/                 -> index.php
http://www.example.com/             -> index.php
http://hello.example.com/           -> index.php?subdomain=hello
http://whatever.example.com/        -> index.php?subdomain=whatever
http://example.com/world            -> index.php?path=world
http://example.com/world/test       -> index.php?path=world/test
http://hello.example.com/world/test -> index.php?subdomain=hello&path=world/test

With the .htaccess I have right now, I can achieve one or the other re-mapping, but not both at the same time.

RewriteEngine On

# Parse the subdomain as a variable we can access in PHP, and
# run the main index.php script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST}        !^www
RewriteCond %{HTTP_HOST}         ^([^\.]+)\.([^\.]+)\.([^\.]+)$
RewriteRule ^.*$ index.php?subdomain=%1

# Map all requests to the 'path' get variable in index.php
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [L] 

I'm having a hard time combining the two...any pointers, please?

EDIT
The unwanted behavior I'm experiencing now is that if I have a subdomain and a path after .com/, only the subdomain will be passed through, ie:

http://hello.example.com/world-> index.php?subdomain=hello
  • 写回答

1条回答 默认 最新

  • doujiu8178 2013-08-18 22:43
    关注

    Use the first rule to add the subdomain parameter, without changing the URI, then use the 2nd rule to route the URI to index.php:

    RewriteEngine On
    
    # Parse the subdomain as a variable we can access in PHP, and
    # run the main index.php script
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{HTTP_HOST}        !^www
    RewriteCond %{HTTP_HOST}         ^([^\.]+)\.([^\.]+)\.([^\.]+)$
    RewriteRule ^(.*)$ /$1?subdomain=%1
    
    # Map all requests to the 'path' get variable in index.php
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?path=$1 [L,QSA] 
    

    The second rule needs to have the QSA flag, otherwise the first rule's query string gets lost.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题