Задать вопрос
@Alk90
php, mysql, jquery, css, html, api

Как сделать обращаться к файлам в одноименной папке?

У меня есть папка admin и в ней работает роутинг. Я хочу сделать запрос вроде https://site.ru/admin/method, но постоянно получаю ошибку, потому что php обращается к папке а не к моему файлу.
Вот такой код я прописал в htaccess:
RewriteRule ^admin/(.*)$ /admin/run.php?request=$1 [QSA]

Подскажите как сделать так чтобы php не пытался обращаться к папке, а обращался к файлу run.php?
  • Вопрос задан
  • 44 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@dodo512
Как на самом деле работает mod_rewrite
Важно понимать, что изменение запроса не заканчивается на последнем RewriteRule. После того, как сработало последнее правило RewriteRule, mod_rewrite смотрит, изменился запрос или нет. Если запрос изменился, его обработка начинается заново с начала .htaccess.
Адрес admin/run.php успешно совпадает с шаблоном ^admin/(.*)$ и происходит бесконечный цикл.
После исчерпания LimitInternalRecursion обработка запроса завершается с ошибкой 500.

Достаточно добавить исключение для admin/run.php
RewriteCond %{REQUEST_URI} !^/admin/run\.php
RewriteRule ^admin/(.*)$ /admin/run.php?request=$1 [QSA,L]

Или так
RewriteCond $1 !^run\.php
RewriteRule ^admin/(.*)$ /admin/run.php?request=$1 [QSA,L]


Или добавить проверку, что адрес не является существующим файлом
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/(.*)$ /admin/run.php?request=$1 [QSA,L]


В переменной %{ENV:REDIRECT_STATUS} сохраняется код с которым завершилось предыдущее внутреннее перенаправление. Эта переменная пуста только на первой итерации обработки запроса.
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^admin/(.*)$ /admin/run.php?request=$1 [QSA,L]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы