#mod-rewrite #apache2
#переписать мод #apache2
Вопрос:
У меня есть следующие настройки перезаписи:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^api/?.*$ api.php [NC,L]
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^.*$ web.php [L]
Я хочу, чтобы не файлы и каталоги были обнаружены api.php или web.php (которые выполняют собственную маршрутизацию), а остальные возвращают файл или каталог. Однако основной маршрут, '/'
который mod_rewrite видит как ''
, не перехватывается — я думаю, это потому, что / является корневым каталогом.
Как я могу исправить это, чтобы оно проходило в web.php сохраняя при этом доступ к каталогам?
Ответ №1:
Во-первых, вы захотите изменить REQUEST_URI в своих правилах на REQUEST_FILENAME. Смотрите http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond
REQUEST_URI: ресурс, запрошенный в строке HTTP-запроса.
REQUEST_FILENAME: полный путь локальной файловой системы к файлу или скрипту, соответствующему запросу.
Затем добавьте другое правило:
RewriteCond %{REQUEST_URI} /
RewriteRule .* web.php [L]
Таким образом, конечный результат был бы:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/?.*$ api.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)? web.php [NC,L]
RewriteCond %{REQUEST_URI} /
RewriteRule .* web.php [L]
Ответ №2:
Синтаксис: URL-путь к базе данных для перезаписи
URL-путь может быть корневым относительным путем или пустым. Пустое значение URL-пути означает, что база правил будет равна корню веб-сайта.