.htaccess config с символическими ссылками и индексными файлами, которые не работают должным образом
Как и многие веб-разработчики, мне нравится использовать .htaccess, чтобы направлять весь трафик на домен через единую точку входа, когда запрос не для файла, который существует в общедоступном каталоге.
Так что-то вроде этого:
RewriteEngine On
# enable symbolic links
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+) index.php [L]
Это означает, что если запрос не для файла css или изображения, мой index.php получает запрос, и я могу выбрать, что делать (подавать некоторый контент или, возможно, 404)
Отлично работает, но я наткнулся на проблему, которая не может помочь мне решить.
Мой корневой каталог выглядит следующим образом:
asymboliclink -> /somewhere/else
css
.htaccess
img
includes
index.php
Тем не менее, Apache не видит символическую ссылку на каталог как каталог. Он передает запрос на мой index.php в корне. Я хочу использовать ссылку, как если бы это была папка, поскольку это ссылка на папку с ее собственным index.php. Я могу получить доступ к http://example.com/asymboliclink/index.php, введя его в адресной строке браузера, но я хочу иметь доступ к нему через http://example.com/asymboliclink
Что мне нужно добавить в мой файл .htaccess, чтобы это произошло?
Ответы
Ответ 1
Используйте переключатель -l
для проверки символической ссылки
RewriteEngine On
# enable symbolic links
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+) index.php [L]
Документация
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html - ctrl + f for "Обрабатывает TestString как путь и проверяет, существует ли она или нет, и является символической ссылкой."
Ответ 2
Флаг -l
ссылается на символические ссылки
RewriteEngine On
# enable symbolic links
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+) index.php [L]