#regex #apache #mod-rewrite #recursion #httpserver
#регулярное выражение #апач #мод-перезапись #рекурсия #сервер http #apache
Вопрос:
Я новичок в правилах перезаписи apache. Я пытаюсь переписать URL
Например :
http://www.example.com/try/this/all letters with plus -> http://www.example.com/try/this/allletterswithplus
итак, требование заключается в том, что я должен перенаправить его на URL, имеющий /try / this и остальные, исключая знак . Следует отметить, что количество знаков плюс не является фиксированным, оно может содержать от 2 до 7 или может быть больше знаков плюс. Предпочтительно, вариант с регулярным выражением будет хорош, потому что текст all letters with plus может содержать что угодно, от числа до алфавита, но без знаков
Я попробовал какую-то комбинацию, но затем она перешла в рекурсивный цикл.
Любая помощь была бы высоко оценена.
Ответ №1:
Вы можете сделать это в 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]
Вы упомянули, что хотели перенаправить на /try /this/ URL без знаков » «. Но если вы просто хотите переписать его внутренне, а не перенаправлять браузер, вам не нужна 2-я часть, просто первое правило удалит их.
Комментарии:
1. Привет, Джон, похоже, это не работает. Он только удалил знак » плюс» из последних двух букв. Я хочу, чтобы это работало рекурсивно, удаляя все знаки плюс. example.com/try/this/all letters with plus -> example.com/try/this/all letters withplus Вы были правы, я просто хочу, чтобы это было переписано внутренне, не перенаправляя это на другой URL. Любые предложения. Спасибо. Я нахожу некоторые зацепки в этом направлении с вашими предложениями.
2. Если вам не нужен редирект, то просто используйте главное правило. Когда я ввожу
RewriteRule ^try/this/(.*) (.*)$ /try/this/$1$2 [PT]
в свой файл .htaccess и тестирую с «example.com/try/this/a b c d e f g h «, я вижу запрос на «example.com/try/this/abcdefgh «в журналах.