我正在尝试使用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/?
问号意味着我不想在新网址中保留查询字符串。
答案 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]