Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 使用获取参数的url重写要重定向的规则_.htaccess_Mod Rewrite_Redirect - Fatal编程技术网

.htaccess 使用获取参数的url重写要重定向的规则

.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]

我试图使用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]
只是为了测试,有些类似的代码,比如>
/$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]