Mod_rewrite (функциональность маршрутизации CakePHP) запрещен после обновления Snow Leopard
Я использую стандартные поставляемые Apple установки PHP 5.3 и Apache 2 для веб-разработки на Mac Pro, который я только что обновил до Mac OS X 10.6 (Snow Leopard). Обновление прошло достаточно хорошо, если я проигнорирую тот факт, что он разрушил мою способность выполнять работу.;)
После обновления приложение CakePHP, которое я разрабатывал, начало выдавать мне 403 запрещенных ошибки при обращении. Основываясь на ошибках в файле журнала, я определил, что Apache задыхается от правил mod_rewrite в файле.htaccess Cake. Вот файл целиком:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
Дело не в том, что сами правила неправильны, а в том, что Apache полностью запрещает использование mod_rewrite. Все остальные страницы на машине работают нормально, и ошибки 403 исчезают, если я закомментирую файл.htaccess (но, конечно, ничего не работает).
В моем файле httpd.conf я попытался изменить это:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
К этому:
<Directory />
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
... который не имеет никакого эффекта.
Я не очень разбираюсь в файлах конфигурации Apache, и я застрял в этом. На самом деле, я знаю достаточно мало, чтобы не знать, какая информация о моей настройке необходима, чтобы люди могли дать полезные ответы. Я просто использую настройку vanilla OS X, ничего особенного.
Поиск в Google на этот раз не принес никаких плодов, поэтому я обращаюсь к вам. Есть идеи?
6 ответов
Как насчет владения / прав доступа к файлам, на которые вы указываете? Я более склонен думать, что Apache не может добраться до них, а не Apache на данный момент.
Редактировать с решением: положить Options +FollowSymLinks
выше RewriteEngine On
Добавление FollowSymlinks в htaccess не работает для меня, поэтому я немного погуглил и нашел другое решение
Оказывается, в каталоге /etc/apache2/users/.conf есть еще один блок Directory, в который необходимо добавить ссылки FollowSymlinks в Options и изменить AllowOverride на All
<Directory "/Users/<your user>/Sites/">
Options Indexes MultiViews FollowSymlinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
Перезапустите apache и htaccess файлы и условия перезаписи теперь должны работать.
Хорошо, это моё решение вычеркнуто из комментариев на этой странице:
Конфигурация:
- Mac OS X 10.6.6
- CakePHP 1.3.7
Решение: комбинация Матье Садуни и Джейсона Страка, так:
Измените / private/etc/apache2/users/ enjuser automotive.conf на:
<Directory "/Users/{user}/Sites/">
Options Indexes MultiViews FollowSymlinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
И измените файл.htaccess корня Cake на:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /~{user}/cake_1_3/
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
(Где {user} - ваше имя пользователя, а cake_1_3 - ваш каталог тортов)
ОБНОВЛЕНИЕ: Да, я новичок в Cake, поэтому я начал с 15-минутного урока блога. Вот как я узнал, что вам нужно отредактировать и 2 других файла.htaccess:
- cake_1_3/ приложение /.htaccess
- cake_1_3/ приложение / Webroot/.htaccess
После RewriteEngine on
добавить строку RewriteBase /~{user}/cake_1_3/
и здесь.
Просто для записи и в ответ на @Matthie Sadouni
Я использую Snow Leopard (OS X 10.6), и местоположение моего файла {user}.conf где-то еще, чем он описал.
"/Private/etc/apache2/users/{user}.conf"
(Замените {user} вашим именем пользователя Mac)
Мне пришлось использовать "RewriteBase /~username//", если он был в моей домашней директории сайтов, и мне пришлось использовать "RewriteBase /~username/cakePHP//", когда я помещал его в подпапку моего домашнего веб-каталога.
У меня была довольно проблема с этим. Если вы используете Leopard или выше, у вас, вероятно, будут проблемы с mod_rewrite.
Когда ваши файлы помещаются в http://localhost/~username/cake, вы не видите стиля. Вот способ исправить это.
Во-первых, откройте httpd.conf. (Я использую nano. Просто убедитесь, что все, что вы используете, может сохранить системный файл.) Убедитесь, что перед компонентом mod_rewrite нет хеша. Затем прокрутите вниз до раздела. Задайте для параметра AllowOverride None значение AllowOverride All. (Только для Snow Leopard) Перейдите в apache2/users/.conf. Отредактируйте этот файл так, чтобы строки читались следующим образом: Опции Индексы MultiViews FollowSymLinks Allow Override All. Теперь сохраните и перезапустите apache (sudo apachectl restart). Здесь начинается сложная часть. Если вы перейдете на свой сайт, он должен дать вам предупреждение о том, что каталог не найден. Теперь вам нужно отредактировать ваши файлы.htaccess. Начните с вашего основного каталога. прямо под RewriteEngine On, добавьте следующую строку "RewriteBase /~//". Сделайте это для корневой папки, папки приложения и папки webroot, убедившись, что они включены в каждый файл.htaccess. Серьезное значение имеет то, что вы обязательно добавляете конечную косую черту. Это важно. Надеюсь, это поможет! Удачи. G* D знает, что вам это нужно.