.htaccess如果使用某个子域,则向查询字符串添加参数

时间:2015-03-29 23:19:18

标签: apache .htaccess mod-rewrite

如果使用某个子域,我想在URL中添加固定参数,否则保持URL不变。 例如: http://subdomain.domain.com?foo=bar

将重写为 http://subdomain.domain.com?foo=bar&isMySub=true

http://domain.com?foo=barhttp://othersubdomain.domain.com?foo=bar仍未受影响。

我在这里环顾四周,到目前为止,我已经能够确定它可能需要[QSA]标志,以便保留查询字符串的其余部分。

这让我接近,但是有些链接和图片会破坏,所以它必须以我不想要的方式弄乱我的网址或查询。

RewriteCond %{HTTP_HOST} ^subdomain\.domain\.com(&|$)
RewriteRule .* index.php?foo=bar [QSA]

1 个答案:

答案 0 :(得分:2)

您可以使用%{REQUEST_URI}服务器变量排除对某些文件的请求并检查扩展名:

RewriteCond %{REQUEST_URI} !\.(css|js|jpe?g|gif|png)$
RewriteCond %{HTTP_HOST} ^subdomain\.domain\.com
RewriteRule .* index.php?isMySub=true [QSA]

[QSA]标记将传递现有的查询字符串,例如?foo=bar,因此您不必这样做。

上述规则集的替代规则:

发送到 index.php 并将请求的资源添加为查询变量req

RewriteRule ^(.*)$ index.php?req=$1&isMySub=true [QSA]

规则模式中的括号()将匹配值捕获到变量中。第一组parens转到$1,第二组转到$2等等。

或者,使用添加的查询变量发送到请求的相同资源。

RewriteRule ^(.*)$ $1?isMySub=true [QSA]