Назад | Перейти на главную страницу

Mod_rewrite (функция маршрутизации CakePHP) запрещен после обновления Snow Leopard

Я использую стандартные установки PHP 5.3 и Apache 2, предоставленные Apple, для веб-разработки на 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, и я застрял на этом. На самом деле я знаю достаточно мало, чтобы не знать, какая информация о моей настройке необходима, чтобы люди могли дать полезные ответы. Я просто использую ванильную установку OS X, ничего особенного.

На этот раз поиск в Google не принес мне никаких результатов, поэтому я обращаюсь к вам. Любые идеи?

Как насчет прав собственности / разрешений на файлы, на которые вы указываете? Я более склонен думать, что Apache не может до них добраться, а не Apache на данный момент.

Изменить с помощью решения: положить Options +FollowSymLinks выше RewriteEngine On

Добавление FollowSymlinks в htaccess не помогло мне, поэтому я немного погуглил, что нашел другое решение

Оказывается, есть еще один блок каталога в /etc/apache2/users/.conf, в котором вам нужно добавить 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/{user}.conf кому:

<Directory "/Users/{user}/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

И измените корневой файл Cake .htaccess на:

<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-минутного руководства для блога. Вот как я узнал, что вам нужно отредактировать еще два файла .htaccess:

  • торт_1_3 / приложение / .htaccess
  • торт_1_3 / приложение / webroot / .htaccess

После RewriteEngine on добавить строку RewriteBase /~{user}/cake_1_3/ и здесь.

У меня была ОЧЕНЬ проблема с этим. Если вы используете Leopard или выше, у вас, вероятно, возникнут проблемы с файлом mod_rewrite.

Когда ваши файлы помещаются в http: // localhost / ~ имя пользователя / торт, вы не видите стили. Вот способ исправить это.

Сначала откройте httpd.conf. (Я использую nano. Просто убедитесь, что все, что вы используете, может сохранить системный файл.) Убедитесь, что перед компонентом mod_rewrite нет хэша. Затем прокрутите вниз до раздела. Установите для AllowOverride None значение AllowOverride All. (Только для Snow Leopard) Перейдите в apache2 / users / .conf. Отредактируйте этот файл так, чтобы строки гласили: Параметры Индексы MultiViews FollowSymLinks Разрешить переопределить все. Теперь сохраните и перезапустите apache (sudo apachectl restart). А вот и сложная часть. Если вы перейдете на свой сайт, он должен предупредить вас о том, что каталог не найден. Теперь вам нужно отредактировать файлы .htaccess. Начните в своем основном каталоге. прямо под RewriteEngine On добавьте следующую строку «RewriteBase / ~ //». Сделайте это для корневой папки, папки приложения и папки webroot, обязательно включив их в каждый файл .htaccess. Крайне важно, чтобы вы добавили конечную косую черту. Это важно. Надеюсь, это поможет! Удачи. Б-г знает, что тебе это понадобится.

Для протокола и в ответ на @Matthie Sadouni

Я использую Snow Leopard (OS X 10.6), и мой файл {user} .conf находится в другом месте, чем он описал.

«/Private/etc/apache2/users/{user}.conf»

(Замените {user} своим именем пользователя Mac)

Мне приходилось использовать «RewriteBase / ~ username //», если он находился в каталоге моего домашнего сайта, и мне приходилось использовать «RewriteBase / ~ username / cakePHP //», когда я помещал его в подпапку моего домашнего веб-каталога.