.htaccess игнорируется при использовании псевдонима URI - PullRequest
8 голосов
/ 04 декабря 2011

Я использую mod_rewrite для маршрутизации всех запросов на index.php.

Моя структура папок выглядит следующим образом:

/Users/Peter/Projects/Framework
    /.htaccess
    /index.php

В моем файле .htaccess у меня есть следующее:

RewriteEngine on
RewriteCond $1 !^index\.php/
RewriteRule ^(.*)$ index.php/$1 [L]

Это прекрасно работает, когда я посещаю projects.localhost/framework/example.

У меня также есть следующий псевдоним: Псевдоним / ~ псевдоним / Пользователи / Питер / Проекты

При переходе на http://projects.localhost/~alias/framework/example в журнале ошибок появляется ошибка 404 и следующее: File does not exist: /Users/Peter/Projects/framework/example

Похоже, что файл .htaccess не вызывается, когда я использую псевдоним URL (ввод giberish в файл .htaccess не вызывает каких-либо ошибок, если использование псевдонима URL подтверждает это).

Для AllowOveride установлено значение All.

Как заставить работать .htaccess при использовании псевдонима URL и применять правила перезаписи последовательно независимо от URL (псевдоним или не псевдоним)?

Редактировать: Переход к projects.localhost/~alias/framework/index.php/example также работает нормально, подтверждая, что псевдоним работает правильно (за исключением того, что к нему не применены правила .htaccess).

Ответы [ 2 ]

11 голосов
/ 13 марта 2012

Я обнаружил, что у вашего вопроса такая же проблема. и из комментария @Gerbens мне удалось найти эту часть руководства Apache, в котором говорится:

#
#  /abc/def/.htaccess -- per-dir config file for directory /abc/def
#  Remember: /abc/def is the physical path of /xyz, i.e., the server
#            has a 'Alias /xyz /abc/def' directive e.g.
#

RewriteEngine On

#  let the server know that we were reached via /xyz and not
#  via the physical path prefix /abc/def
RewriteBase   /xyz

#  now the rewriting rules
RewriteRule   ^oldstuff\.html$  newstuff.html

Добавление базы перезаписи в файл .htaccess в каталоге с псевдонимами решило мою проблему.

Так в вашем случае

RewriteEngine on
RewriteBase /~alias
RewriteCond $1 !^index\.php/
RewriteRule ^(.*)$ index.php/$1 [L]
0 голосов
/ 04 декабря 2011

Вы уверены, что у вас включен mod_rewrite?

...