Как заставить .htaccess работать с текущим каталогом, а не с подкаталогами?
-
05-07-2019 - |
Вопрос
Я использую mod rewrite для косвенного доступа к моим PHP-файлам в корневом каталоге моего сайта. В настоящее время у меня есть что-то вроде этого,
RewriteRule ^(blog|about|page3|etc)$ /$1.php [L]
Но я хотел бы использовать это
RewriteRule ^(.*)$ /$1.php [L]
Чтобы мне не пришлось обновлять свой файл .htaccess всякий раз, когда я хочу добавить новую страницу на свой веб-сайт. Однако проблема в том, что это влияет и на мои подкаталоги. Что делает CSS, javascript, изображения недоступными, потому что он перенаправляет на /dir/example.png.php".
Так что же является лучшим решением здесь?
Решение
Попробуйте это правило:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule .* <*>.php [L]
Другие советы
Измените .htaccess
на это:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /$1.php [L]
После запуска механизма перезаписи он сначала проверит, является ли запрошенный файл действительным файлом в системе или каталогом. Если это не один из них, он выполнит правило, которое в данном случае состоит в том, чтобы попытаться найти файл, добавив .php
и обработав его.
Подкаталоги, изображения, CSS и т. п. будут в порядке, потому что они выйдут из процесса перезаписи, как только будут найдены.
Я бы сделал это с помощью фильтров, чтобы игнорировать подкаталоги. Таким образом, вам нужно только изменить его, если вы добавите подпапку. Вам нужно будет добавить строку типа Sosh , если у вас есть изображения или другие файлы в папке
Следующее будет игнорировать " изображения " и " js " вложенные папки и перенаправить все остальное
RewriteRule ^images* - [L]
RewriteRule ^js* - [L]
RewriteRule ^(.*)$ /$1.php [L]
Примерно так (обратите внимание!):
RewriteRule !\.(js|ico|gif|jpg|png|css|zip|gz|html|xml)$ index.php