RewriteRule使用获取参数的url重定向

时间:2011-02-09 23:46:50

标签: .htaccess mod-rewrite redirect

我正在尝试使用RewriteRule将表单x页面重定向到y页面。 x页面有两个参数> products.php?product = $ 1& page = $ 2(myweb.com/products.php?prod ...) y应为$ 1 / $ 2 /(myweb.com/$1/$2 /)

我试过这个>

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

仅用于测试,以及一些类似的代码,例如> /$1/代替$1/,仅$1 我尝试将RewriteCond与query_string一起使用,但没有任何效果......

ofc继续htaccess>

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

以及一些不相关的规则(我认为)

你能帮我吗?

感谢。

编辑:

经过一番大规模的搜索,我找到了答案! 这就是答案:

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

现在解释: 首先,添加了与查询字符串匹配的重写条件。 第二,我从重写规则和$ = the continue(查询字符串)中删除查询字符串。我还需要添加? (重写标记的第二部分的(问号)> %1/?问号意味着我不想在新网址中保留查询字符串。

1 个答案:

答案 0 :(得分: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]