Apache mod_rewrite и PHP? Аргумент = что-то - PullRequest
0 голосов
/ 16 февраля 2009

Я пытаюсь заставить все файлы HTML и PHP на моем сайте перенаправлять через index.php, чтобы к ним можно было применить общие фреймы, шаблонное решение, которое я кодировал, которое я нашел довольно элегантным. В любом случае, у меня проблемы с моими файлами PHP, особенно с теми, у которых есть аргументы после них.

Мое обычное правило для файлов PHP следующее:

RewriteCond %{REQUEST_URI} !index.php$
RewriteRule ^(.+).php$ index.php?page=$1&type=1 [NC,L]

Это прекрасно работает для любых страниц, которые не имеют аргументов, но вы можете видеть, что любые документы PHP, которые имеют

?argument=something

заканчивается как:

index.php?page=path/to/page?argument=something&type=1

, который вообще не является рабочим решением. Теперь, что меня беспокоит, так это $ в конце правила, не должно ли это привести к сбою, если после .php есть что-то?

В любом случае, я попытался переписать правило следующим образом:

RewriteRule ^(.+).php\?(.+)$ index.php?page=$1&type=1&$2 [NC,L]

но это просто не срабатывает вообще. Кажется, что выражение regex, используемое в mod_rewrite, сильно отличается от того, с чем я привык работать, поэтому я уверен, что это простые ошибки, которые я допустил, но я не могу найти достойную документацию для this вкус регулярных выражений, кроме самых основных примеров.

Может кто-нибудь показать мне, что я делаю не так? Спасибо.

1 Ответ

6 голосов
/ 16 февраля 2009

Попробуйте qsa в своем правиле, что означает «добавление строки запроса» - mod_rewrite добавит любую строку запроса из исходного URL-адреса к переписанному URL-адресу

RewriteCond %{REQUEST_URI} !index.php$
RewriteRule ^(.+).php$ index.php?page=$1&type=1 [NC,L,qsa]

RewriteRule не соответствует строке запроса, поэтому вторая попытка не сработала. Вот соответствующее примечание от руководство

Шаблон не будет соответствовать против строки запроса. Вместо этого вы должен использовать RewriteCond с Переменная% {QUERY_STRING}. Вы можете, Тем не менее, создать URL-адреса в строка подстановки, содержащая часть строки запроса. Просто используйте вопросительный знак внутри замены строка, чтобы указать, что следующее текст должен быть повторно введен в Строка запроса. Когда вы хотите стереть существующая строка запроса, конец строка подстановки только с вопросительный знак. Объединить новый запрос строка со старой, используйте [QSA] флаг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...