我确定此问题之前已经得到解答,但我不确定如何搜索答案,因为谷歌搜索会被普通的mod_rewrite网址样式问题所淹没。
我有一个.htaccess文件,其中包含以下标准规则,用于将非www查询重定向到www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301]
该网站的结构为单页面应用程序,包含两个主要页面,该网站根据网址参数显示html。让我们说第一页是苹果,第二页是梨。我想这样做,如果用户搜索website.com,那么将调用第一条规则,它将重定向到www.website.com。然后我希望它添加一个参数,以便它变成www.website.com/?p=apples,因为它们都没有包含在原始搜索中.p = apples或?p = pears。
我尝试了几种解决方案,但所有这些解决方案似乎都会导致重定向循环。这个意外地导致了一个重定向循环,例如:
RewriteCond %{THE_REQUEST} !^.*\?p=apples.*$
RewriteCond %{THE_REQUEST} !^.*\?p=pears.*$
RewriteRule .* http://www.website.com/?p=apples [R] # also how can this be generalized so it's not domain name specific
答案 0 :(得分:0)
看看这是否是你要找的。如果您尝试将其组合以便重定向到www,并且如果查询字符串为空,则重定向到?p=apples
,那么此代码应该适合您。
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{QUERY_STRING} !p=(.+)$ [NC]
RewriteRule ^$ http://www.%{HTTP_HOST}/?p=apples [R=301,L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L,QSA]