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

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

CakePHP использует mod_rewrite в файлах .htaccess для перенаправления запросов в собственную папку webroot. Проблема состоит в том, что перенаправления перечисляют неправильный путь и вызывают ошибку 404. У моего приложения CakePHP, которое хранится в каталоге листингов, есть файл .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.

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

Ответы [ 3 ]

3 голосов
/ 31 марта 2010

Решение вашего вопроса можно найти внизу этой страницы в книге CakePHP:

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

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

0 голосов
/ 27 ноября 2017

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

Редактировать оба файла .htaccess:

/ webroot / .htaccess

/. Htaccess

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

Вот весь файл /webroot/.htaccess:

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

0 голосов
/ 14 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...