исправление cakephp .htaccess / mod_rewrite для настроек общего хостинга - PullRequest
11 голосов
/ 05 июня 2009

Я пытаюсь установить cakePHP на общий хостинг. После извлечения файлов в папку, такую ​​как ~ / public_html / dev / cake и посещения соответствующего URL (в этом случае http://hostname/~username/dev/cake/),, я получаю ошибку 404:


Не найдено

Запрошенный URL / usr / home / username / public_html / dev / cake / app / webroot / не найден на этом сервере.


Я подозреваю, что причина этого в том, что при ближайшем рассмотрении абсолютный путь к ~ / public_html на самом деле не / usr / home / username / public_html , а скорее / USR / WWW / пользователи / имя пользователя / .

Вот что я пытался (но, очевидно, это не работает): (~ / public_html / dev / cake / app / webroot / .htaccess)

<IfModule mod_rewrite.c>  
    RewriteEngine On  
    RewriteBase /usr/www/users/username/dev/cake/app/webroot/ 
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]  
</IfModule>  

К сожалению, это, похоже, ничего не меняет (сообщение 404 остается прежним). Мысли? * * 1023

Ответы [ 8 ]

13 голосов
/ 12 июня 2009

В случае, если не

RewriteBase /usr/www/users/username/dev/cake/app/webroot/ 

быть

RewriteBase /~username/dev/cake/

RewriteBase заботится о сопоставлении реальных URL-адресов с виртуальными, и я думаю, это то, что вы хотите.

2 голосов
/ 27 апреля 2012

Я просто хочу отметить, что я ДУМАЛ, что модуль был загружен, потому что я видел код, но, видимо, он не был включен!

Чтобы включить его в SSH (терминал), введите следующую команду

sudo a2enmod rewrite

Команда ниже показывает все активные модули, если они появятся в списке, значит, они установлены.

apache2ctl -M

Обязательно перезапустите сервер с ...

service apache2 restart

PhpCake должен начать работать сейчас.

2 голосов
/ 11 июня 2009

Вы изменяете не тот файл. Файл .htaccess, который нужно изменить, находится в / dev, его не следует изменять в /dev/cake/app/webroot/.htaccess

1 голос
/ 06 сентября 2009

У меня была похожая проблема с «расширенной установкой» из официальной Cockbook CakePHP. Через пару часов мне удалось заставить его работать.

ОС: Mac OS X

Основной каталог Cake: / usr / lib / cake
Каталог приложения моего приложения: / Users / myuser / dev / myapp
Каталог веб-корня моего приложения: / Users / myuser / Sites / myapp

Модификация / Пользователи / myuser / Сайты / myapp / index.php

if (!defined('ROOT')) {
    define('ROOT', DS.'Users'.DS.'myuser'.DS.'dev');
}
if (!defined('APP_DIR')) {
    define('APP_DIR', 'myapp');
}
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
    define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib');
}

Модификация / Пользователи / myuser / Сайты / myapp / .htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /~myuser/myapp/
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

Что касается / Users / myuser / dev / myapp / .htaccess - этот файл не требуется в этой конфигурации, поэтому я удалил его. Самым сложным в этой конфигурации является включение mod_rewrite в Apache. На Mac редактирование / private / etc / apache2 / httpd.conf кажется бессмысленным (для этой задачи). Для каждого пользователя создается дополнительный файл конфигурации Apache.

Модификация / private / etc / apache2 / users / myuser.conf

<Directory "/Users/myuser/Sites/">
    Options FollowSymLinks
    AllowOverride All
</Directory>

По умолчанию для параметра AllowOverride установлено значение None, поэтому mod_rewrite не будет работать в этой конфигурации.

После этих изменений http://localhost/~myuser/myapp работает правильно.

PS. Быстрое исправление прав доступа к каталогу tmp.

sudo chgrp -R www /Users/myuser/dev/myapp/tmp
sudo chmod -R g+w /Users/myuser/dev/myapp/tmp
1 голос
/ 13 июля 2009

Да, вы должны указать путь DOCUMENT_ROOT в следующих файлах. Пожалуйста, обратитесь к phpinfo () вашего сервера, чтобы получить правильный путь DOCUMENT_ROOT. Это должно быть что-то вроде var/www/html/.

  1. .htaccess в корневом каталоге / (Вне приложения, торт, каталоги поставщиков)

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule    ^$ ) DOCUMENT_ROOT/app/webroot/    [L]
        RewriteRule    (.*) DOCUMENT_ROOT/app/webroot/$1 [L]
    </IfModule>
    
  2. .htaccess в каталоге / app

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule    ^$    DOCUMENT_ROOT/app/webroot/    [L]
        RewriteRule    (.*) DOCUMENT_ROOT/app/webroot/$1    [L]
    </IfModule>
    
  3. .htaccess в каталоге / app / webroot

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ DOCUMENT_ROOT/app/webroot/index.php?url=$1 [QSA,L]
    </IfModule>
    

У меня это сработало.

1 голос
/ 25 июня 2009

Я размещаюсь на паре, и мне удалось заставить работать правила перезаписи, но у меня возникли проблемы со ссылкой HTML->, получающей параметры сортировки для всех ссылок на страницах. Тот же код работает на моем локальном компьютере с работающим окном, но при сортировке пар или слишком большом количестве параметров запроса (страницы редактирования или обновления) возникают проблемы.

1 голос
/ 05 июня 2009

Я думаю, что .htaccess читает это '~' и думает, что вы ссылаетесь на свою домашнюю папку (что-то вроде ярлыка в linux).

Самый быстрый способ запустить ваше приложение - это зайти в config / core.php торта и отключить использование перезаписи (он говорит вам раскомментировать некоторые вещи и удалить файл .htaccess). Другой способ - отредактировать ваш .htaccess и как-то сказать, что «~» не ссылается на домашний каталог. может быть простой \ будет работать.

1 голос
/ 05 июня 2009

Почему бы просто не распаковать файлы в /usr/www/users/username/?

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