.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]