如果使用某个子域,我想在URL中添加固定参数,否则保持URL不变。 例如: http://subdomain.domain.com?foo=bar
将重写为 http://subdomain.domain.com?foo=bar&isMySub=true
但http://domain.com?foo=bar或http://othersubdomain.domain.com?foo=bar仍未受影响。
我在这里环顾四周,到目前为止,我已经能够确定它可能需要[QSA]标志,以便保留查询字符串的其余部分。
这让我接近,但是有些链接和图片会破坏,所以它必须以我不想要的方式弄乱我的网址或查询。
RewriteCond %{HTTP_HOST} ^subdomain\.domain\.com(&|$)
RewriteRule .* index.php?foo=bar [QSA]
答案 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]