URL переписать рекурсивно - PullRequest
0 голосов
/ 21 января 2012

Я пытаюсь переписать URL с www.xxx.com/test.com на www.xxx.com/my.php?d=test.com, используя следующую директиву:

        Options Indexes FollowSymLinks
        RewriteEngine On

        RewriteRule ^((.+)\.(.+))$ my.php?d=$1

thisне работает, например, URL-адрес www.xxx.com/test.com кажется, что он переписывается на www.xxx.com/my.php?d=test.com, а затем переписывается на www.xx.com/my.php?d=my.php или что-то в этом роде.означает ли это, что шаблон применяется рекурсивно?как я могу исправить регулярное выражение?

Ответы [ 2 ]

0 голосов
/ 22 января 2012

Мод перезаписи будет запускать URI через механизм перезаписи снова и снова, пока URI не будет одинаковым до и после того, как он пройдет через механизм перезаписи. Вот что происходит:

  1. URI - test.com
  2. правило ^((.+)\.(.+))$ соответствует, URI переписан в my.php (с некоторой строкой запроса d = test.com )
  3. сравнить: test.com - это не то же самое, что my.php , запустить URI обратно через механизм перезаписи
  4. URI my.php
  5. правило ^((.+)\.(.+))$ соответствует, URI переписан в my.php (со строкой запроса d = my.php )
  6. сравнить: my.php совпадает с my.php , до и после сопоставления URI прекратить запись

Ваш результат /my.php?d=my.php

Вам нужно добавить условие, чтобы my.php не применял правило. Добавьте это перед вашей перепиской

RewriteCond %{REQUEST_URI} !^/my.php
0 голосов
/ 21 января 2012

Это работает для меня:

RewriteRule ^(.+)\.(.+)$ my.php?d=$1.$2

Эффект не в том, что правило применяется рекурсивно (этого не происходит), оно просто не соответствует.

Кстати,если вы хотите остановить двигатель на определенной строке, вы можете добавить [L].

Простой способ проверить правило перезаписи - этот сайт .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...