вопрос о переменных правила перенаправления mod_rewrite - PullRequest
0 голосов
/ 12 сентября 2009

Я в некотором роде .htaccess n00b, и не могу на всю жизнь получить ручку с регулярными выражениями.

У меня есть следующий фрагмент кода RewriteRule, который прекрасно работает:

RewriteRule ^logo/?$ /pages/logo.html

По сути, это занимает /pages/logo.html и делает его /logo.

Есть ли способ для меня обобщить этот код с переменными, чтобы он работал автоматически без необходимости иметь независимую строку для каждой страницы?

Я знаю, $1 может работать как переменная, но это обычно для запросов, и я не могу заставить его работать в этом случае.

Ответы [ 2 ]

1 голос
/ 12 сентября 2009

Прежде всего вам нужно знать, что mod_rewrite может обрабатывать только запросы к серверу. Поэтому вам нужно запросить /logo, чтобы переписать его на /pages/logo.html. И это то, что делает правило: оно переписывает запросы с URL-путем /logo внутри к /pages/logo.html, а не наоборот.

Если вы теперь хотите использовать части совпадающей строки, вам нужно использовать группы для их группировки ((expr)), к которым вы затем можете обратиться с помощью $ n. В вашем случае подойдет шаблон [^/], который описывает любой символ, кроме косой черты /:

RewriteRule ^([^/]+)$ /pages/$1.html
1 голос
/ 12 сентября 2009

Попробуйте это:

RewriteRule ^/pages/(.*)\.html$ /$1

(.*) соответствует чему-либо между pages/ и .html. Все, что соответствует, используется в $1. Таким образом, /pages/logo.html становится /logo, а /pages/subdir/other_page.html становится /subdir/other_page

...