Я хочу разрешить только 2 вещи в .htaccess:
/favicon.ico
-> доставить файл/<anythingelse>
-> index.php
Следовательно, /logs/mylog.log
и /hello.py
должны перейти в index.php, а не отображать необработанное содержимое этих файлов (которые существуют!).
Как сделать такой .htaccess?
Я старался:
Решение №1 (кажется, создает бесконечный цикл):
RewriteEngine On
RewriteCond %{REQUEST_URI} !favicon\.ico$
RewriteRule ^(.*)$ index.php
Решение №2 (предоставляет файлы /logs/mylog.log и /hello.py, этого не должно происходить!):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !favicon\.ico$
RewriteRule ^(.*)$ index.php
1 ответ
Это сделает это:
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^ index.php
Удалены строки, проверяющие, был ли это существующий файл или каталог, так как вы хотите, чтобы они тоже были переписаны.
Добавлена проверка, что это еще не index.php, чтобы избежать цикла.
Изменен синтаксис RewrieCond на простое сравнение, которое более разборчиво.
Добавлен косая черта в начале URI запроса, иначе они не будут совпадать.
Удален захват в RewriteRule, который вы не используете.
Обновить
При дальнейшем обсуждении в комментариях, это должно работать, когда копия файла .htaccess
помещается в подкаталог. Вот обновление, которое будет работать:
RewriteEngine On
RewriteRule !^(?:favicon\.ico|index\.php)$ index.php [END]
Директивы RewriteCond нельзя было использовать без добавления к ним имени каталога, поскольку /index\.php$
был опцией, но также соответствовал файлу в подкаталоге. Вышеупомянутое достигает цели без необходимости обновлять при копировании, хотя и не очень красиво.
Похожие вопросы
Новые вопросы
apache
Используйте этот тег (вместе с соответствующим тегом языка программирования) для вопросов программирования, касающихся HTTP-сервера Apache. Не используйте этот тег для вопросов о других продуктах Apache Foundation. Обратите внимание, что вопросы конфигурации сервера обычно лучше подходят на https://serverfault.com
!=/index.php
?index.php
не всегда находится в корне моего веб-сайта. т.е. будет ли он работать как дляexample.com/mywebsite/index.php
, так и дляexample.com/index.php
?/mywebsite/index.php
будет переписан в/index.php
, как и все остальное. Вы имеете в виду, что хотите, чтобыindex.php
был специфичным для каждого каталога? Значит, все в каталоге переписывается наindex.php
в этом каталоге? Это совсем другая, более сложная вещь, и я могу обновить свой ответ, если это так.example.com/anotherwebsite/
(здесь не важно) иexample.com/mywebsite/
, который содержитexample.com/mywebsite/.htaccess
, о котором я говорю. Тогда я хочу, чтобыexample.com/mywebsite/
перенаправлялся не наexample.com/index.php
, а наexample.com/mywebsite/index.php
.