mod_rewrite 301 редирект не работает - PullRequest
0 голосов
/ 17 июня 2011

Я пытаюсь настроить перезапись, которая будет перенаправлять этот URL:

/ video-2011.php? Video = 150

на это:

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

У меня есть перезапись, работающая с использованием этой строки в моем 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 ]

2 голосов
/ 17 июня 2011

Я думаю, что вы можете пропустить строку из вашего .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]

Я предполагаю, что вы хотите переписать URL, если это:

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

И перенаправить URL-адрес, если он:

/video-2011.php?video=150

на:

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

Таким образом, URL-адреса выглядят красиво и аккуратно.

Пожалуйста, исправьте меня, если я ошибаюсь.

Редактировать

Я добавил в RewriteCond, чтобы остановить повторное переписывание.

Поскольку первое правило, очевидно, будет переписано:

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

Это означает, что строка запроса, которую вы не видите:

/video-2011.php?video=150

Из-за того, что второе правило произошлотоже.

0 голосов
/ 17 июня 2011

Можете ли вы попробовать:

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

И да, он перенаправит /video/150/foo на /video.php?video=150 не наоборот, как вы указали в своем вопросе.

...