mod_rewrite将php参数添加到基本URL

时间:2014-03-02 04:07:52

标签: apache .htaccess mod-rewrite redirect

我确定此问题之前已经得到解答,但我不确定如何搜索答案,因为谷歌搜索会被普通的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

1 个答案:

答案 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]