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 знает, что вам это нужно.

Другие вопросы по тегам