Как и многие веб-разработчики, мне нравится использовать .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 файл, чтобы это произошло?
Используйте ключ -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 как путь и проверяет, существует ли она или нет, и является символической ссылкой».
Флаг -l
ссылается на символические ссылки
RewriteEngine On # enable symbolic links Options +FollowSymLinks RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.+) index.php [L]