2011-07-27 128 views
0

我曾經有下列網址結構爲我的視頻網站:htaccess以及301重定向問題

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重定向的大列表,使舊視頻林ks在Twitter等仍然工作。

我的問題,當我訪問:

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

它重定向到:

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

它加載很好,但我希望它停止把?slug= ...(以前的URL )位於URL的末尾。

+1

有一個RedirectMatch指令,因此不需要「有301個重定向的大列表」。 – hop

回答

1

使用此重寫規則(使用mod_rewrite)重定向舊網址:

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] 
+0

這很好,謝謝你!必須調整1美元爲2美元的slu to傳輸,而不是代碼。 – Titan

+0

@alexcroox有點奇怪 - 你能告訴我最後的規則..因爲我不明白'$ 2'可能來自哪裏,如果你被複制而沒有修改任何東西(如果你做了改變,那麼也許是)。 – LazyOne

+0

對不起,我忘了我改變了代碼部分的正則表達式,以允許額外的字符,並且必須把惡意$放在那裏! – Titan