htaccess неожиданно перенаправляет в папку - PullRequest
5 голосов
/ 01 июля 2011

У меня странная для меня проблема. Я занимаюсь разработкой приложения Zend Framework и имею следующую файловую структуру:

/
/application/
/public/
/public/.htaccess
/public/index.php
/public/js/
/public/style/
/public/profile/
/.htaccess

Мой домен указывает на folder /

Когда я ввожу адрес example.com/profile/, он переходит в профиль контроллера, и это хорошо. Когда я ввожу адрес example.com/profile, сервер перенаправляет меня на: example.com/public/profile/

Я хотел бы иметь решение, которое всякий раз, когда я запрашиваю: example.com/profile/ или example.com/profile

Будет отображена та же страница, но вторая версия дает мне перенаправление, и я не знаю почему.

Файл /.htaccess:

RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]

Роль этого файла - перенаправлять весь трафик с / на / public, но без перенаправлений.

Файл /public/.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Кто-нибудь может мне помочь с этим? Спасибо.


Я исправил это. Вот решение, если у кого-то есть такая же проблема: Чтобы это исправить, вы должны установить следующие параметры и отключить DirectorySlash

Options -Indexes FollowSymLinks
DirectorySlash Off

Теперь Apache не должен добавлять косые черты в конце URI, когда вы указываете на каталог. Это также отключает перенаправление на uri с косой чертой.

Ответы [ 2 ]

1 голос
/ 01 июля 2011

По выбору соответствует последнему /.Измените ваш .htaccess файл на это:

RewriteEngine On
RewriteRule ^(.*)/?$ public/$1 [L]
0 голосов
/ 01 июля 2011

Это работает для меня:

RewriteEngine On
RewriteRule ^/$|^(.*)$  /public/$1 [QSA,NC,L]
...