htaccess и переписывают - Внутреннее перенаправление в Псевдониме

У меня есть следующее .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 сконфигурируйтесь для контакта с этой проблемой, моя цель состоит в том, чтобы сделать это использование только .htaccess.

0
задан 2 April 2015 в 15:34
1 ответ

Лучшая практика заключается в переносе ваших конфигурационных директив в реальный конфигурационный файл 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.

1
ответ дан 4 December 2019 в 17:24

Теги

Похожие вопросы