我正在尝试为我的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是网址中的第一个)。
答案 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]