Почему мой файл .htaccess перенаправляется на полный путь к серверу вместо относительного пути?

StackOverflow https://stackoverflow.com/questions/2542820

Вопрос

У меня никогда раньше не было проблем с CakePHP, но что-то странное с этим сервером заставляет перенаправления в файлах .htaccess вести себя странно.

CakePHP использует mod_rewrite в файлах .htaccess для перенаправления запросов в свою собственную папку webroot.Проблема в том, что перенаправления указывают неправильный путь и вызывают ошибку 404.Мое приложение CakePHP, которое хранится в каталоге listings, имеет файл .htaccess следующего вида:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$ app/webroot/    [R=301,L]
    RewriteRule    (.*) app/webroot/$1 [R=301,L]
</IfModule>

(* обратите внимание, что R = 301 вызывает внешнее перенаправление, чтобы мы могли видеть, что происходит с нашей стороны.Он действительно должен опустить этот флаг и выполнить перенаправление внутренне, прозрачно для конечных пользователей)

Предполагается, что это перенаправит любой запрос с http://hostname.com/~username/listings/ Для http://hostname.com/~username/listings/app/webroot/ Однако вместо того, чтобы просто добавлять “app/webroot/” в конце, как и предполагалось, добавляется полный путь к серверу ( /home/username/public_html/listings/app/webroot/ ) , приводящий к окончательному URL http://hostname.com/home/username/public_html/listings/app/webroot/ что, очевидно, неверно и вызывает ошибку 404.

Хостинг находится в общей учетной записи хостинга, так что это ограничивает то, что я могу делать с настройками.Я никогда раньше не видел, чтобы такое происходило, и я думаю, что это что-то неправильное со стороны хостинга, но если у кого-то есть полезные предложения, я могу также передать их хостинговой компании.

Это было полезно?

Решение

Решение вашего вопроса можно найти в нижней части этого Страница в книге cakephp:

Для многих служб хостинга (GoDaddy, 1and1) ваш веб-сервер фактически обслуживается из каталога пользователя, который уже использует mod_rewrite.Если вы устанавливаете CakePHP в каталог пользователя (http://example.com /~имя пользователя/cakephp/) или любая другая структура URL, которая уже использует mod_rewrite, вам нужно будет добавить инструкции RewriteBase в файлы .htaccess, используемые CakePHP (/.htaccess, /app/.htaccess, /app/webroot/.htaccess).

Я также развернул CakePHP из папки public_html моего профиля.Мне пришлось изменить 3 одинаковых файла .htaccess, упомянутых выше.Просто добавьте RewriteBase /~username/ к файлам .htaccess сразу после RewriteEngine on!

Другие советы

Попробуйте удалить .htaccess из основного файла...У меня это сработало

Это было довольно просто (с использованием общего хостинга uolhost):

Отредактируйте оба файла .htaccess:

/веб-корень/.htaccess

/.htaccess /.htaccess

Добавьте следующую строку:База перезаписи /

Вот полный файл /webroot/.htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top