Назад | Перейти на главную страницу

htaccess и rewrite - Внутреннее перенаправление в Alias

У меня есть следующие .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.