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

Я пытаюсь установить cakePHP на настройку общего хостинга. После извлечения файлов в папку ~ / public_html / dev / cake и посещение соответствующего URL-адреса (в этом случае http: // имя_хоста / ~ имя_пользователя / 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 остается тем же). Мысли?

не должны

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

быть

 RewriteBase /~username/dev/cake/ 

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

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

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

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

 sudo a2enmod rewrite 

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

 apache2ctl -M 

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

 service apache2 restart 

Теперь PhpCake должен начать работать.

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

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

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

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

У меня была аналогичная проблема с «расширенной установкой» из официального 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 

Да, вы должны указать путь 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> 

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