.htaccess 使用获取参数的url重写要重定向的规则
我试图使用RewriteRule将表单x页面重定向到y页面。 x page得到了两个参数:products.php?product=$1和page=$2(myweb.com/products.php?prod…) y应该是$1/$2/(myweb.com/$1/$2/) 我试过这个>.htaccess 使用获取参数的url重写要重定向的规则,.htaccess,mod-rewrite,redirect,.htaccess,Mod Rewrite,Redirect,我试图使用RewriteRule将表单x页面重定向到y页面。 x page得到了两个参数: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]
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^products.php?product=(.*) $1/ [R=301,L]
只是为了测试,有些类似的代码,比如>/$1/
,而不是$1/
,只有$1
我尝试将RewriteCond与查询字符串一起使用,但没有任何效果
ofc表示有继续访问htaccess>
RewriteRule ^(.*)/$ $1.php [L]
还有一些不相关的规则(我认为)
你能帮我吗
谢谢
编辑:
经过大量的搜索,我找到了答案!
答案是:
RewriteCond %{QUERY_STRING} ^product=(.*)$
RewriteRule ^test.php$ %1/? [R=301,L]
现在解释一下:
首先,添加了与查询字符串匹配的重写条件。
其次,我从重写规则中删除查询字符串,并将$=继续(查询字符串)。我还需要补充什么?(问号)在rewriterule>
%1/?
的第二部分,问号表示我不想在新url中保留查询字符串。规则的第一部分应该包含一个正则表达式,服务器可以将请求与之进行比较。例如:
RewriteRule ^([^/]+)/? index.php?page=$1 [L]
这将需要并将其重定向到。规则的第一部分匹配,第二部分处理。我的规则是,([^/]+)”,它是一个正则表达式,可以匹配任何东西。如果要缩小规则的工作方式,可以自定义正则表达式以包含或排除某些字符串部分
我建议你考虑在你的规则之上加上下面的条件。它们确保如果与规则匹配的文件或目录实际存在,服务器不会用重写覆盖实际文件
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
.htaccess和mod_rewrite是巫毒,使用一个旧的引用。在一个实时站点上实现这种功能之前,请确保您进行了彻底的研究
---------------------编辑:
经讨论后更新:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^product=([^/]+)$
RewriteRule ^products\.php$ %1.php [L]
或
我不想重定向到php页面。我想重定向有自己重写规则的页面(例如,我得到了以下规则^(.*)/$$1.php[L]。因此,如果我转到^products.php?product=$1,它会将我重定向到有其规则的$1/。然后,正如我所提到的,您会希望将正则表达式写成这样:RewriteRule^products.php?product=([^/]+)?$1/[L]。规则的第一部分始终是某种正则表达式或字符串(无变量),第二部分是使用第一部分中使用的正则表达式收集的变量。请尝试此部分>重写规则^products.php?product=([^/]+)?www.youtube.com[R=301,L]然后转到myweb.com/products.php?product=test,它没有将我重定向到youtube。仍然不工作…嘎。看,伏都教。请看答案,我已经添加了一个更新(并确认)的规则。我的网站是实时的,所以我不能放置相同的规则。这是我在htaccess RewriteCond%{QUERY_STRING}^product=([^/]+)中添加/更改的内容$RewriteRule^test\.php$%1.php[R=301,L]转到myweb.com/test.php?product=something,它将我重定向到myweb.com/something.php?product=something,这是错误的…应该将我重定向到myweb.com/something/'RewriteRule`与php无关。你可能想删除那个'php'标记。删除,尽管我认为它与php有关,因为95%使用php的人也使用e htacces(重写规则)。
RewriteEngine On
RewriteCond %{QUERY_STRING} ^product=([^/]+)$
RewriteRule ^products\.php$ %1/ [L]