2011-02-09 61 views
1

我想使用RewriteRule inorder重定向表单x页到y页。 x页有两个参数> products.php?product = $ 1 & page = $ 2(myweb.com/products.php?prod ...) y应该是$ 1/$ 2 /(myweb.com/$1/$2/)RewriteRule重定向与url参数

我想这一个>

Options +FollowSymlinks 
RewriteEngine on 
RewriteBase/
RewriteRule ^products.php?product=(.*) $1/ [R=301,L] 

只是用于测试,而像>/$1/代替$1/,一些similiar代码只$1 我试图用的RewriteCond与QUERY_STRING但是毫无效果....

ofc,继续到htaccess >

RewriteRule ^(.*)/$ $1.php [L] 

和一些规则,这是不相关的(我认为)

你能帮助我吗?

谢谢。

编辑:

一些大肆搜捕我找到答案了! 这就是答案:

RewriteCond %{QUERY_STRING} ^product=(.*)$ 
RewriteRule ^test.php$ %1/? [R=301,L] 
现在

的解释: 首先,添加rewritecondition将查询字符串相匹配。 秒我从重写规则中删除查询字符串,并且$ = continue(查询字符串)。我还需要添加? (问号)在重写的第二部分>%1/?问号意味着我不想在新的url中保留查询字符串。

+0

“ RewriteRule`与PHP无关。你可能想删除'php'标签。 – 2011-02-10 02:25:01

+0

已删除,但我认为它与php有关,因为95%的使用php的人也使用htacces(rewriterules)。 – Ron 2011-02-10 04:03:55

回答

3

规则的第一部分应该包含一个正则表达式,服务器可以根据该正则表达式比较请求。例如:

RewriteRule ^([^/]+)/? index.php?page=$1 [L] 

,将采取http://somedomain.fake/somepage/,重定向到http://somedomain.fake/index.php?page=somepage。规则的第一部分匹配,第二部分处理。我的规则在那里,“([^ /] +)”是正则表达式,可以匹配任何东西。如果要缩小规则的工作方式,可以自定义正则表达式以包含或排除某些字符串部分。

我建议您考虑在规则上面添加以下条件。它们确保如果与规则匹配的文件或目录确实存在,则服务器不会覆盖具有重写的实际文件。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

.htaccess和mod_rewrite是voodoo,使用旧报价。确保在实况网站上实施这种事情之前彻底研究。

---------------------编辑:

后讨论更新:

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^product=([^/]+)$ 
RewriteRule ^products\.php$ %1.php [L] 

OR

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^product=([^/]+)$ 
RewriteRule ^products\.php$ %1/ [L]