Конфигурация .htaccess с символическими ссылками и индексными файлами не работает должным образом - PullRequest
14 голосов
/ 24 марта 2011

Как и многим веб-разработчикам, мне нравится использовать .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чтобы это произошло?

Ответы [ 2 ]

19 голосов
/ 24 марта 2011

Используйте переключатель -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 для "Обрабатывает TestString как имя пути ипроверяет, существует ли он и является ли он символической ссылкой. "

13 голосов
/ 24 марта 2011

Флаг -l ссылается на символические ссылки

RewriteEngine On
# enable symbolic links
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+) index.php [L]
...