вопрос о переменных правила перенаправления mod_rewrite

StackOverflow https://stackoverflow.com/questions/1414266

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top