У меня есть следующие .htaccess
в подкаталоге:
RewriteEngine on
RewriteRule ^file.js$ file.php
Каталог, содержащий указанные выше и другие файлы, выглядит так:
dir/
├── index.html
└── js
├── file.php
└── .htaccess
Я хочу мое file.js
быть внутренне перенаправлен к file.php
.
Когда у меня есть dir
под /var/www/html/
, и мой vhost
определение выглядит так:
DocumentRoot /var/www/html
<Directory "/var/www/html">
AllowOverride All
Require all granted
</Directory>
#Alias /dir "/tmp/dir"
#<Directory "/tmp">
# AllowOverride All
# Require all granted
#</Directory>
оно работает!
Однако, когда я переезжаю dir
к /tmp/
и изменить vhost
чтобы выглядеть так:
DocumentRoot /var/www/html
#<Directory "/var/www/html">
# AllowOverride All
# Require all granted
#</Directory>
Alias /dir "/tmp/dir"
<Directory "/tmp">
AllowOverride All
Require all granted
</Directory>
в редирект больше не работает, хотя я все еще могу получить доступ к другим файлам, таким как index.html
.
Журналы показывают мне, что перезапись добавляет DocumentRoot
на полный путь моего file.php
и, таким образом, давая мне Файл не существует сообщение
Вопрос:
Как мне написать .htaccess, который агностик туда, где он размещен, и просто выполняет внутреннее перенаправление с одного конкретного файла на другой?
Имейте в виду, что пока я могу изменить основной vhost
config для решения этой проблемы, моя цель - сделать это, используя только .htaccess
.
В лучшая практика заключается в том, чтобы переместить ваши директивы конфигурации в фактический файл конфигурации Apache (и полностью запретить файлы .htaccess).
В этом случае это решит вашу проблему, потому что ваша директива больше не зависит от расположения файловой системы ...
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example.com/
Alias /scripts/ /var/www/scripts/
RewriteEngine on
RewriteRule ^file.js$ file.php
</VirtualHost>
Если вы не системный администратор и у вас нет доступа к конфигурации Apache, то ваш вопрос не будет по теме но это не относится к делу, вы можете решить проблему, создав (копию) .htaccess
файл в каталоге, содержащем file.js
. В зависимости от AllowOverride
директива настоящий администратор настроен для вас, вам обычно разрешается помещать файл .htaccess в любой каталог и подкаталог, к которому Apache имеет доступ. Вы не ограничены DocumentRoot.