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

时间:2014-07-13 15:52:53

标签: regex apache .htaccess mod-rewrite redirect

是的,我检查了SO中发布的相关问题,但找不到对我有用的东西。

我的.htaccess已经有很多重定向,并且它们工作正常,但是这个可以让我四处走动。

我的网址如下:

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]

这也很好。

现在,我想让“古老而丑陋”的网址仍然存在,以便重定向到“好”的网址。

我尝试了以下内容:

Redirect 301 /comp_all.php?vid_mod=529 http://example.com/comparatif-voiture/Audi/A4/529

但这不起作用。它只显示“丑陋”的URL。

重写规则之前或之后是否放置了上述重定向并不重要。

1 个答案:

答案 0 :(得分:1)

您不能在Redirect指令中使用查询字符串。您需要RewriteCond中的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:我还简化了您的其他规则。