Почему мой файл .htaccess перенаправляется на полный путь к серверу вместо относительного пути?
-
23-09-2019 - |
Вопрос
У меня никогда раньше не было проблем с 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]