我曾经为我的视频网站提供以下网址结构:
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)位。
答案 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]