2

我正在尝试向我的 htaccess 文件添加一些重写规则,但我遇到了一些麻烦。

我目前有以下设置(位来自不同的站点,所以如果不一致,我很抱歉!):

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /search\.php\?part=([^&]+)\ HTTP/ 
RewriteRule ^search\.php$ http://test.dev/part/%1? [R=301,L] 
RewriteRule ^part/(.+)$ /search.php?part=$1 [L]

这使我可以转到test.dev/search.php?part=foo并将 URL 重写/重定向到test.dev/part/foo - 这工作正常并向我显示正确的内容。

但是,我也可以转到test.dev/search.php?part=foo,bar并将 URL 重写/重定向到test.dev/part/foo,bar - 即使这显示了正确的内容,但这不是我希望网址看起来像什么。

有没有办法考虑'part'之后的url中的内容,如果找到逗号,删除逗号和它后面的任何内容?

我仍然需要我的代码读取 'foo' 和 'bar' 并显示这两个选项的正确内容,但 url 显示test.dev/part/foo(因为 foo 是第一个网址)。

4

1 回答 1

1

用这个替换你的:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\s/+search\.php\?part=([^&,\s]+) [NC]
RewriteRule ^ /part/%1? [R=301,L] 

RewriteRule ^part/(.+)$ /search.php?part=$1 [L,NC]

更新:将逗号后的字符串捕获到查询字符串中

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\s/+search\.php\?part=([^&,\s]+)(?:,([^&,\s]+))? [NC]
RewriteRule ^ /part/%1?q=%2 [R=301,L] 

RewriteRule ^part/(.+)$ /search.php?part=$1 [L,NC,QSA]
于 2013-09-17T09:17:17.657 回答