Regex 301重定向不工作(我知道是另一个)

Regex 301重定向不工作(我知道是另一个),regex,apache,.htaccess,mod-rewrite,redirect,Regex,Apache,.htaccess,Mod Rewrite,Redirect,是的,我查看了SO中发布的相关问题,但找不到对我有帮助的内容 My.htaccess已经有很多重定向,它们工作得很好,但这一个让我有了机会 我有一个像这样的URL: http://example.com/comp_all.php?vid_mod=529 我把它改成了更友好的: http://example.com/comparatif-voiture/Audi/A4/529 为了实现这一点,我在.htaccess中添加了以下规则: RewriteCond %{REQUEST_URI} ^/?

是的,我查看了SO中发布的相关问题,但找不到对我有帮助的内容

My.htaccess已经有很多重定向,它们工作得很好,但这一个让我有了机会

我有一个像这样的URL:

http://example.com/comp_all.php?vid_mod=529
我把它改成了更友好的:

http://example.com/comparatif-voiture/Audi/A4/529
为了实现这一点,我在.htaccess中添加了以下规则:

RewriteCond %{REQUEST_URI} ^/?comparatif-voiture [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([0-9]+$) /comp_all.php?vid_mod=$1 [L]
这也很好用

现在,我想让“又旧又丑”的URL仍然存在,以便重定向到“好”的URL

我尝试了以下方法:

Redirect 301 /comp_all.php?vid_mod=529 http://example.com/comparatif-voiture/Audi/A4/529
但这是行不通的。它只显示“丑陋”的URL


我将上述重定向放在重写规则之前还是之后并不重要。

您不能在
重定向
指令中使用查询字符串。您需要在
mod_rewrite
中执行以下操作:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+comp_all\.php\?vid_mod=([0-9]+) [NC]
RewriteRule ^ /comparatif-voiture/Audi/A4/%1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^comparatif-voiture/.+?/([0-9]+)/?$ /comp_all.php?vid_mod=$1 [L,QSA]

PS:我还简化了你的其他规则。

谢谢你,阿努巴瓦。就这样。我不知道在重定向时使用查询字符串。非常感谢。干杯