从通配符子域重写中删除query_string

时间:2011-11-16 05:15:27

标签: .htaccess query-string subdomain wildcard

我的目标是指出:

http://xyz.domain.com/abchttp://www.domain.com/dir/file.php?var=xyz

(换句话说,http://_____.domain.com/abc的任何内容都会从http://www.domain.com/dir/file.php?var=_____读取。)

我在网站根目录(http://www.domain.com/.htaccess)的.htaccess文件中使用了这个:

RewriteCond %{HTTP_HOST} !^www.domain.com [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC]
RewriteRule ^abc/*$ dir/file.php?var=%2 [NC,L]

虽然有效,但当我只是想http://xyz.domain.com/abc/?var=xyz而没有显示查询字符串时,它会自动重定向到http://xyz.domain.com/abc

我考虑在上面添加%{QUERY_STRING}行,但在尝试将两个RewriteCond的var彼此匹配时卡住了。

然后我在http://www.askapache.com/htaccess/modrewrite-tips-tricks.html#Removing_Query_String

找到了这个
RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* http://www.askapache.com%{REQUEST_URI}? [R=301,L]

...我猜这是正确的代码在常规域上摆脱这样的东西?我尝试将其更改为适用于通配符子域:

RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{HTTP_HOST} !^www.domain.com [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com[NC]
RewriteRule .* http://%2.domain.com%{REQUEST_URI}? [R=301,L]

但它不起作用。所以...有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

有一个名为mod_dir的模块,当它认为您正在尝试访问目录但缺少尾部斜杠时,会重定向浏览器。当我在我的apache上测试它只发生在目录实际存在时,我被重定向到一个尾部斜杠,但是重写发生了,我看到了查询字符串。在内部尝试强制使用尾部斜杠,当重写为dir / file时,明确使用尾部斜杠:

# Force trailing slash when accessing /abc without one
RewriteRule ^abc$ /abc/ [NC,L]

# these are the same
RewriteCond %{HTTP_HOST} !^www.domain.com [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC]
# Match against a trailing slash
RewriteRule ^abc/$ dir/file.php?var=%2 [NC,L]