mod_rewrite 301重定向不起作用

时间:2011-06-16 22:52:28

标签: .htaccess mod-rewrite redirect rewrite http-status-code-301

我正在尝试设置重定向此网址的重写:

/video-2011.php?video=150

到此:

/视频/ 150 /自由标题文本-这里/

我在HTACCESS中使用此行进行重写:

RewriteRule ^video/([0-9]+)/(.*)$ video-2011.php?video=$1 [L]

但是,一旦我将R = 301添加到混音中,它就会中断。有什么想法吗?

以下是完整的HTACCESS:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^video/([0-9]+)/(.*)$ video-2011.php?video=$1 [R=301,L]

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

我想你可能会错过.Htaccess中的一行。

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^video/([0-9]+)/([a-z0-9-_]+)$ video-2011.php?video=$1 [L]
#New
RewriteCond %{REQUEST_URI} !^/video/([0-9]+)/([a-z0-9-_]+)/?$
RewriteCond %{QUERY_STRING} ^video=([0-9]+)&name=([a-z0-9-_]+)/?$
RewriteRule ^video-2011.php$ video/%1/%2/? [R=301,L]

我假设您希望重写该网址:

/video/150/freeform-title-text-here/

并且重定向网址,如果是:

/video-2011.php?video=150

为:

/video/150/freeform-title-text-here/

所以这样可以保持网址看起来整洁。

如果我错了,请纠正我。

修改

我在RewriteCond中添加了阻止第二次重写的事情。

因为第一条规则显然会改写:

/video/150/freeform-title-text-here/

这意味着您没有看到的查询字符串:

/video-2011.php?video=150

第二条规则也会发生。

答案 1 :(得分:0)

你可以尝试:

RewriteRule ^video/([0-9]+)/ /video-2011.php?video=$1 [R=301,L,NC,QSA]

是的,它会将/video/150/foo重定向到/video.php?video=150,而不是像你在问题中所说的那样反过来。