Перенаправление в сочетании с условием перезаписи в htaccess - PullRequest
2 голосов
/ 12 марта 2010

У меня есть веб-сайт, управляемый cms, без возможности изменить код. Чего я хочу добиться, так это создавать дружественные URL-адреса, используя только движок apaches mod-rewrite.

Проблема в том, что я создаю бесконечный цикл, потому что сначала я перенаправляю исходный URL (index.php? Id = 21) на дружественный (/ friendly /), а затем переписываю часть '/ friendly' обратно в Ид = 21 '

Я знаю, что в этом случае должно быть дополнительное условие или параметр, чтобы избежать зацикливания, но я не могу заставить работать одно из возможных решений.

Вот код:

RewriteCond %{query_string} ^id=21$ [NC]
RewriteRule /* /peuterspeelzaal? [R=301,L]

RewriteRule ^peuterspeelzaal$ index.php?id=21 [L]

Ответы [ 2 ]

3 голосов
/ 13 марта 2010

Вам нужно взглянуть на строку запроса в THE_REQUEST , чтобы увидеть, что первоначально было запрошено:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?id=21\  [NC]
RewriteRule /* /peuterspeelzaal? [R=301,L]

RewriteRule ^peuterspeelzaal$ index.php?id=21 [L]
3 голосов
/ 12 марта 2010

Я предполагаю, что вы переписываете в обоих направлениях, чтобы старые ссылки были перенаправлены на новые дружественные URL-адреса?

Вы можете просто добавить фиктивный параметр во все ваши "дружественные" переписывания, чтобы они не соответствовали другому правилу:

RewriteCond %{query_string} ^id=21$ [NC]
RewriteRule /* /peuterspeelzaal? [R=301,L]

RewriteRule ^peuterspeelzaal$ index.php?id=21&dummy=1 [L]
...