Ответ 1
Не должны
RewriteBase /usr/www/users/username/dev/cake/app/webroot/
be
RewriteBase /~username/dev/cake/
RewriteBase
заботится о отображении реальных URL-адресов в виртуальные, и я думаю, что вы хотите.
Я пытаюсь установить 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 остается тем же). Мысли?
Не должны
RewriteBase /usr/www/users/username/dev/cake/app/webroot/
be
RewriteBase /~username/dev/cake/
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).
Самый быстрый способ заставить ваше приложение работать, чтобы перейти к cake config/core.php и отключить использование rewrite (он сообщает u раскомментировать некоторые вещи и удалить некоторый файл .htaccess). другой способ - отредактировать ваш .htaccess и как-то сказать, что "~" не ссылается на домашний каталог. возможно, просто\будет работать.
Я хожу на пару, и мне удалось заставить правила перезаписи работать, но у меня возникают проблемы с ссылкой HTML- > , получающей параметры сортировки для всех ссылок на страницах. Тот же код отлично работает на моем рабочем запуске локального компьютера, но при парной сортировке или слишком большом числе параметров запроса (страницы редактирования или обновления) возникают проблемы.
Да, вы должны указать путь 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>
Это сработало для меня.
У меня была аналогичная проблема с "расширенной установкой" из официального 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