Исправление cakephp.htaccess/mod_rewrite для настроек общего хостинга

Я пытаюсь установить 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/users/username/.

Вот что я пытался (но, очевидно, не работал): (~/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 остается тем же). Мысли?

Ответ 1

Не должны

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

be

RewriteBase /~username/dev/cake/

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

Ответ 2

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

Ответ 3

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

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

sudo a2enmod rewrite

В приведенной ниже команде показаны все активные модули, если они отображаются в списке, после чего вы его установили.

apache2ctl -M

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

service apache2 restart

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

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

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule    ^$    DOCUMENT_ROOT/app/webroot/    [L]
        RewriteRule    (.*) DOCUMENT_ROOT/app/webroot/$1    [L]
    </IfModule>
    
  • .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>
    

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

Ответ 8

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

ОС: Mac OS X

Каталог основного торта: /usr/lib/cake
Каталог приложений: /Пользователи/myuser/dev/myapp
Мое приложение webroot directory: /Пользователи/myuser/Sites/myapp

Модификация /Users/myuser/Sites/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');
}

Модификация /Users/myuser/Sites/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