Я работаю над сайтом, на котором все PHP-скрипты проходят через одну PHP-страницу (passthrough.php).
.htaccess файл предполагается , чтобы взять определенные специальные каталоги и преобразовать их в переменные GET, чтобы скрипт контроллера знал, что с ними делать. Итак:
http://example.com/ajax/method.php
становится
http://example.com/passthrough.php?path=method.php&mode=ajax
и
http://example.com/ajax/json/method.php
становится
http://example.com/passthrough.php?path=method.php&mode=ajax&output=json
И так далее. Вот что у меня в файле .htaccess:
RewriteRule ajax/(.*)$ $1?mode=ajax [QSA]
RewriteRule (xml|json)/(.*)$ $2?output=$1 [QSA]
RewriteRule (.*)\.php$ passthrough.php?path=$1 [QSA]
RewriteRule passthrough.php - [L]
Во втором примере mod_rewrite выполняет правило ajax, а затем выглядит так, как будто выполняется правило passthrough.php. Затем он пытается запустить процесс перезаписи. Теперь правило ajax не подходит, но правило вывода подходит, так что оно применяется, и затем URL снова переписывается правилом passthrough.php, что приводит к следующим переменным GET:
путь: method.php / json / method.php / json / method
вывод: JSON
режим: ajax
У меня такой вопрос: есть ли способ заставить механизм перезаписи обрабатывать весь URL за один раз? поэтому URL-адрес приходит в виде /ajax/json/method.php, становится /json/method.php?mode=ajax, затем /method.php?mode=ajax&output=json, затем /passthrough.php?mode=ajax&output=json&path = метод, все за один раз? Кажется, что он запускается через .htaccess один раз для каждого сопоставляемого правила, вместо анализа URL-адреса, изменения в зависимости от следующего правила, изменения в зависимости от следующего правила и т. Д.
Я пытался использовать несколько флагов, включая [PT] и [S], но они плохо документированы. Эту проблему можно решить, написав особые условия, которые передают код непосредственно в сценарий сквозного прохождения, но это не очень хорошо решено и не кажется мне правильным.