вопрос о переменных правила перенаправления mod_rewrite
-
06-07-2019 - |
Вопрос
Я немного похож на .htaccess n00b и никак не могу понять, что такое регулярные выражения.
У меня есть следующий фрагмент кода RewriteRule
, который прекрасно работает:
RewriteRule ^logo/?$ /pages/logo.html
Обычно он принимает /pages/logo.html
и делает его / logo
.
Есть ли способ для меня обобщить этот код с переменными, чтобы он работал автоматически без необходимости иметь независимую строку для каждой страницы?
Я знаю, что $ 1
может работать как переменная, но это обычно для запросов, и я не могу заставить его работать в этом случае.
Решение
Во-первых, вы должны знать, что mod_rewrite может обрабатывать только запросы к серверу. Поэтому вам нужно запросить / logo
, чтобы переписать его в /pages/logo.html
. И это то, что делает правило: оно переписывает запросы с URL-путем / logo
внутри, в /pages/logo.html
, а не наоборот.
Если вы хотите использовать части совпавшей строки, вам нужно использовать группы для их группировки ( (
expr
)
), на который вы затем можете ссылаться с помощью $
n
. В вашем случае подойдет шаблон [^ /]
, который описывает любой символ, кроме косой черты /
:
RewriteRule ^([^/]+)$ /pages/$1.html
Другие советы
Попробуйте это:
RewriteRule ^/pages/(.*)\.html$ /$1
(. *)
соответствует чему-либо между pages /
и .html
. Все, что соответствует, используется в $ 1
. Таким образом, /pages/logo.html
становится / logo
, а /pages/subdir/other_page.html
становится / subdir / other_page код>