Вопрос по mod-rewrite, query-string – mod_rewrite для перенаправления URL со строкой запроса

0

Мы искали весь стек-поток, но ни один из ответов, похоже, не подходит для этой ситуации. У меня много рабочих правил mod_rewrite уже в моем файле httpd.conf. Недавно я обнаружил, что Google проиндексировал один из моих переписанных URL-адресов со строкой запроса:

http://domain.com/?state=arizona

Я хотел бы использовать mod_rewrite для перенаправления 301 на этот URL:

http://domain.com/arizona

Проблема в том, что позже в моих правилах перезаписи второй URL переписывается для передачи переменных запроса в WordPress. Это заканчивает тем, что было переписано:

http://domain.com/index.php?state=arizona

Какая правильная функциональность. Все, что я пробовал до сих пор, либо не сработало вообще, либо поставило меня в бесконечный цикл переписывания. Это то, что у меня сейчас, которое застревает в цикле:

RewriteCond %{QUERY_STRING} state=arizona [NC]
RewriteRule .*   http://domain.com/arizona [R=301,L]
#older rewrite rule that passes query string based on URL:
RewriteRule ^([A-Za-z-]+)$ index.php?state=$1 [L]

который дает мне бесконечный цикл перезаписи и приводит меня к этому URL:http://domain.com/arizona?state=arizona

Затем я попробовал это:

RewriteRule .*   http://domain.com/arizona? [R=301,L]

который избавился от строки запроса в URL, но все еще создает цикл.

Ваш Ответ

2   ответа
1

добавление 2nd RewriteCond окончательно исправило это - теперь переписывает правильно и без цикла:

# redirect dynamic URL: ?state=arizona
RewriteCond %{QUERY_STRING} state=arizona [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteRule .*   http://domain.com/arizona? [R=301,L]
# older rewrite rule that passes query string based on URL:
RewriteRule ^([A-Za-z-]+)$ index.php?state=$1 [L]

И здесь's код, чтобы заставить его работать для любого значения штата, а не только для Аризоны:

RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} ^state=([A-Za-z-]+)$ [NC]
RewriteRule .*   http://domain.com/%1? [R=301,L]
0

RewriteCond %{REQUEST_URI} ^/\?state=arizona$ [NC]

должно быть

RewriteCond %{QUERY_STRING} state=arizona [NC]

Request_uri заканчивается на? маркер.

Это нетоже не получится, так как тогда я попаду в цикл перезаписи. meeble
Вам, вероятно, нужно подтянутьRewriteRule ^([\w-]+)$ index.php?state=$1 [L] вRewriteRule ^([a-z_]+)$ index.php?state=$1 [L], index.php выигралне соответствует этому и выигралТ перенаправлены. Wige
как бы "точка» символ соответствует классу символов [\ w-]? Во всяком случае, я изменил его выше, но все еще есть тот же цикл. meeble

Похожие вопросы