301 перенаправить строку запроса на SEO-дружественные URL через .htaccess - PullRequest
1 голос
/ 26 апреля 2011

Я написал некоторый код в моем файле .htaccess, который позволяет использовать оптимизированные для SEO URL-адреса вместо уродливых строк запроса. Следующий код переписывает дружественную для SEO версию в браузере в версию строки запроса на сервере.

RewriteEngine On
RewriteRule ^seo/([^/]*)/$ /directory/script.php?size=large&colour=green&pattern=$1 [L]

Так, что уродливый

http://www.mysite.com/directory/script.php?size=large&colour=green&pattern=striped

Теперь прекрасна

http://www.mysite.com/directory/seo/striped/

Просто, чтобы немного объяснить код; seo предназначен для добавления дополнительных ключевых слов к URL, /directory/ - это каталог, в котором находится файл .htaccess, параметры size=large и colour=green никогда не изменяются, в то время как pattern=$1 может иметь много разных значений.

Приведенный выше код работает отлично. Однако проблема в том, что я застрял с двумя URL-адресами, которые указывают на одно и то же содержимое. Чтобы решить эту проблему, я бы хотел, чтобы 301 перенаправил старые, уродливые строки запросов на URL, дружественные для SEO. То, что я пробовал до сих пор, не работает - и Google сегодня не особенно дружелюбен.

Кто-нибудь может предложить рабочий код для размещения в моем файле .htaccess, который перенаправляет некрасиво на новый URL, сохраняя при этом перезапись? Спасибо!

Ответы [ 2 ]

4 голосов
/ 26 апреля 2011

Это должно сработать:

RewriteEngine On

## Redirect to pretty urls
# The '%1' in the rewrite comes from the group in the previous RewriteCond
RewriteCond %{REQUEST_URI} !seo
RewriteCond %{QUERY_STRING} ^size=large&colour=green&pattern=([a-zA-Z]*)$
RewriteRule (.*) /directory\/seo\/%1\/? [L,R=301]

## Rewrite to long url, additional parameter at the end will cause
## the internal redirect not to match the previous rule (would cause redirect loop)
RewriteRule ^directory\/seo\/([^/]*)/$ /directory/script.php? size=large&colour=green&pattern=$1&rewrite [L]

При необходимости вы также можете подобрать размер и цвет, изменив их на группы регулярных выражений и используя соответствующие%N

Надеюсь, это поможет.

0 голосов
/ 26 апреля 2011

Не проверено, но это может работать ...

RewriteRule ^ directory / script.php? Size = large & color = green & pattern = (. *) $ / Seo / $ 1 /? [R = 301, NE, NC, L]

...