Apache переписывает запрос правил, имеющий регулярное выражение и выполняется рекурсивно - PullRequest
0 голосов
/ 11 ноября 2011

Я новичок в правилах переписывания Apache.Я пытаюсь переписать URL

Например:

http://www.example.com/try/this/all+letters+with+plus -> http://www.example.com/try/this/allletterswithplus

, поэтому необходимо перенаправить его на URLиметь / попробовать / это и все остальное, кроме знака +.Стоит отметить, что число знака плюс не является фиксированным, оно может иметь от 2 до 7 или больше знаков плюс.Предпочтительно, вариант с регулярным выражением будет хорошим, потому что текст all + буквы + с + плюс может включать в себя что угодно, от цифры до алфавита, но без знаков

Я попробовал некоторую комбинацию, но потом она пошлав рекурсивный цикл.

Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 11 ноября 2011

Вы можете сделать это в 2 шага, используя mod_rewrite.Первым шагом является удаление всех «+» из чего-либо после /try/this/, затем вторым шагом является проверка, изначально ли в запросе было «+», но в текущем URI этого нет.

Это правилобудет убирать знаки "+", пока их не будет.Но мы просто передаем это через механизм перезаписи.

RewriteRule ^try/this/(.*)\+(.*)$ /try/this/$1$2 [PT]

Это правило проверяет, содержал ли исходный запрос URL-адрес со знаком «+», и, если это так, проверяет, есть ли у него запрос.все было удалено.Если это так, прекратите все переписывание и перенаправьте браузер:

RewriteCond %{THE_REQUEST} \ /try/this/.*\+.*\ HTTP
RewriteRule ^try/this/([^\+]*)$ /try/this/$1 [R,L]

Вы упомянули, что хотите перенаправить на URL / try / this / без знака «+».Но если вы просто хотите переписать его внутренне, а не перенаправлять браузер, вам не нужна вторая часть, только первое правило удалит их.

...