htaccess и проблема перенаправления 301 - PullRequest
0 голосов
/ 27 июля 2011

Раньше у меня была следующая структура URL для моего видео-сайта:

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

, который загружается нормально, но я хочу, чтобы он прекратил помещать бит ?slug= ... (предыдущий URL) в конец URL.

1 Ответ

1 голос
/ 27 июля 2011

Используйте это правило перезаписи (используя mod_rewrite) для перенаправления старых 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]
...