?在htaccess文件中重定向301后附加到路径名的末尾

时间:2013-10-17 07:14:35

标签: regex apache .htaccess mod-rewrite redirect

这应该很简单,但我无法解决问题。我相信这对某人来说是个秒钟答案。

我在htaccess文件中重写如下:

RewriteCond %{THE_REQUEST} \ /product\.php\?categoryfilename=([A-Za-z0-9-%.]+)&category=([A-Za-z0-9-%.]+)&id=([A-Za-z0-9-]+)
RewriteRule ^ /%3-P.html? [R=301,L]

重写有效 如果我输入:

www.mysite.co.uk/product.php?categoryfilename=all-products.php&category=All%20products&id=MY-PRODUCT

重定向到:

http://www.mysite.co.uk/MY-PRODUCT-P.html

然后我应该做一个简单的重定向:

重定向301 /MY-PRODUCT-P.html http://www.mysite.co.uk/MY-PRODUCT-123-P.html

这应该是一个静态重定向,但它会附加一个讨厌的?到结果的最后。

如果我删除了?从重定向结束然后我得到第一个重写中原始凌乱路径名左侧的PHP变量

非常感谢

1 个答案:

答案 0 :(得分:0)

您无法使用QUERY_STRING指令匹配或操纵Redirect。请改用mod_rewrite。将此代码放在DOCUMENT_ROOT/.htaccess

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/product\.php\?categoryfilename=([^&]*)&category=([^&]*)&id=([^&\s]*)
RewriteRule ^ /%3-P.html? [R=301,L,NE]

RewriteRule ^(MY-PRODUCT)-(P\.html)$ /$1-123-$2? [L,NC,R=301]