在.htaccess中组合多个可选变量会重写

时间:2014-10-08 00:09:01

标签: php regex .htaccess mod-rewrite redirect

尝试在一个.htaccess中处理多个潜在的重写

每个子域都应该解析为一个文件夹 每个/ a /用户名应解析为/?a =用户名

我有各自的规则。但我无法弄清楚如何让它们同时工作。


示例(现在工作):

  • www.domain.com - >没有变化
  • black.domain.com - > www.domain.com/black(工作)
  • white.domain.com - > www.domain.com/white(works)
  • www.domain.com/a/username - > www.domain.com/?a=username(works)

我需要做些什么:

  • white.domain.com/a/username - > www.domain.com/white/?a=username(失败 - 仅变为www.domain.com/white)
  • black.domain.com/a/username - > www.domain.com/black/?a=username(失败 - 仅成为www.domain.com/black)

RewriteEngine on
RewriteRule ^index\.php?$ / [NC,R,L]

#RewriteRule ^(.*).domain.com$ http://www.domain.com/$1 [QSA,R=302,L]

RewriteCond "%{HTTP_HOST}" !^www.* [NC]
RewriteCond "%{HTTP_HOST}" !^admin.* [NC]
RewriteCond "%{HTTP_HOST}" !^mail.* [NC]
RewriteCond "%{HTTP_HOST}" !^email.* [NC]

RewriteCond "%{HTTP_HOST}" ^([^\.]+).domain.*$
RewriteRule ^(.*)$ http://www.domain.com/%1 [R=302] 

RewriteRule ^a/(.*)$ http://www.domain.com/%1?a=$1 [R=302,L]

1 个答案:

答案 0 :(得分:1)

尝试将规则更改为:

RewriteEngine on
RewriteRule ^index\.php?$ / [NC,R,L]

#RewriteRule ^(.*).domain.com$ http://www.domain.com/$1 [QSA,R=302,L]

RewriteCond "%{HTTP_HOST}" !^www.* [NC]
RewriteCond "%{HTTP_HOST}" !^admin.* [NC]
RewriteCond "%{HTTP_HOST}" !^mail.* [NC]
RewriteCond "%{HTTP_HOST}" !^email.* [NC]
RewriteCond "%{HTTP_HOST}" ^([^\.]+).domain.*$
RewriteRule ^$ http://www.domain.com/%1 [R=302] 

RewriteCond "%{HTTP_HOST}" !^www.* [NC]
RewriteCond "%{HTTP_HOST}" !^admin.* [NC]
RewriteCond "%{HTTP_HOST}" !^mail.* [NC]
RewriteCond "%{HTTP_HOST}" !^email.* [NC]
RewriteCond "%{HTTP_HOST}" ^([^\.]+).domain.*$
RewriteRule ^a/(.*)$ http://www.domain.com/%1?a=$1 [R=302,L]