htaccess和301重定向问题

时间:2011-07-27 18:24:32

标签: .htaccess mod-rewrite redirect

我曾经为我的视频网站提供以下网址结构:

http://domain.com/v/VIDEO_CODE/VIDEO_SLUG

我现在已将其更改为:

http://domain.com/VIDEO_SLUG

我的.htaccess看起来像这样:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.domain.com [NC]
RewriteRule (.*) http://domain.com/$1 [R=301,L]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^([^\.]+)$ ./index.php?slug=$1 [NC,L]

# Old URLs
Redirect 301 /v/sNzpNC2acrA/tightrope-canyon http://domain.com/tightrope-canyon

我有一个301重定向的大清单,以便Twitter等上的旧视频链接仍可用。

我的问题,当我访问时:

http://domain.com/v/sNzpNC2acrA/tightrope-canyon

重定向到:

http://domain.com/tightrope-canyon?slug=v/sNzpNC2acrA/tightrope-canyon

加载正常,但我希望它停止在URL的末尾放置?slug= ...(上一个URL)位。

1 个答案:

答案 0 :(得分:1)

使用此重写规则(使用mod_rewrite)重定向OLD URL:

RewriteRule ^v/[a-zA-Z0-9]+/(.*)$ http://domain.com/$1? [R=301,L]

最后的?将删除旧的查询字符串。

如果您想使用Redirect指令...那么请使用RedirectMatch代替数百个硬编码Redirect 301 ...

RedirectMatch 301 ^/v/[a-zA-Z0-9]+/(.*)$ http://domain.com/$1?

你.htaccess有这样的规则可能看起来像这样:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.domain.com [NC]
RewriteRule (.*) http://domain.com/$1 [R=301,L]

RewriteRule ^v/[a-zA-Z0-9]+/(.*)$ http://domain.com/$1? [R=301,L]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^\.]+)$ ./index.php?slug=$1 [NC,L]