在url中删除逗号并在htaccess中重定向后删除所有内容

时间:2013-09-17 08:49:51

标签: php apache .htaccess redirect mod-rewrite

我正在尝试为我的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 并将网址重写/重定向到 test.dev/part/foo - 这很好,并向我展示了正确的内容。

但是,我也可以转到 test.dev/search.php?part=foo,bar ,然后将网址重写/重定向到 test.dev/part/foo,bar - 即使这显示正确的内容,这也不是我想要的网址。

有没有办法在'part'之后考虑url中的内容,如果找到逗号,请删除逗号以及之后的任何内容?

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

1 个答案:

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