Включить перезапись URL (mod_rewrite) с помощью файлов .htaccess в ~ / Sites on Lion


13

Я не могу заставить mod_rewrite работать на Lion. Я разрабатываю несколько сайтов локально, в ~ / Sites, используя файлы .htaccess. Я нахожусь на 10.7.3, и я не касался никаких файлов конфигурации, за исключением включения PHP в httpd.conf (который работает).

Я знаю, что здесь есть по крайней мере 2 вопроса по этому поводу, но детальные решения там не работают. Также как и другие решения, которые я нашел в Интернете. Я, должно быть, делаю что-то глупое или что-то упускаю из виду, иначе я, наверное, схожу с ума, но это не работает.

Я попробовал все обычные вещи:

  1. В /private/etc/apache2/users/<myusername>.conf, изменения AllowOverride Noneк AllowOverride Allи перезапустить веб - сервер

  2. Кроме того, /private/etc/apache2/httpd.confизмените все / все вхождения AllowOverride Noneна AllowOverride All- я пробовал это во всех различных местах, где находятся эти директивы

  3. Попробуйте в основном все возможные комбинации значений для Optionsстроки выше / ниже AllowOverrideлинии, включая значения:Indexes MultiViews FollowSymLinks All

Конечно, всегда перезагружать веб-сервер после такого изменения. Ничего из этого не работает. Все мои чистые URL просто не работают; Я получаю 404 - не найдено. Журнал ошибок Apache просто дает мне ошибки «Файл не существует:». Таким образом, кажется, что модуль mod_rewrite даже не работает вообще.

Я удостоверился, что mod_rewrite загружен в httpd.conf, который это; это так по умолчанию при установке Lion.

Сумасшедшая вещь в том, что все работало идеально - пока я не перешел на новую машину под управлением Lion. То есть я исключаю ошибку в моих файлах .htaccess, потому что я знаю, что она работала раньше. Кроме того, если бы это была ошибка в .htaccess, я бы получил какое-то сообщение об ошибке из модуля mod_rewrite в файле ошибок Apache, по крайней мере, сообщая мне, что сам модуль вызывается. Но этого не происходит.

Я что-то пропускаю? Нужно ли менять настройки конфига где-нибудь еще? Должен ли я изменить конфигурацию PHP? Почему инструкции (например, Как активировать mod_rewrite на MacOSX Lion и заставить mod_rewrite работать на Mac OS X ) работают для других людей, но не для меня? :)

Я уже потратил часы на это. Любая помощь будет очень признательна.


Кстати, я не хочу использовать MAMP. Я использовал MAMP раньше, и он не очень хорошо работал с MySQL, который уже есть в моей системе. Это будет замена одной головной боли другой головной болью, так что нет, спасибо :)
Niels Heidenreich

Кстати, я на стандартном OS X Lion, а не Lion Server.
Нильс Хайденрайх

Это не отвечает на этот вопрос, но альтернативой борьбе с локальной средой вашего Mac для разработки веб-приложений является использование чего-то вроде Vagrant , которое позволяет легко настраивать и управлять конфигурациями виртуальных машин.
Дэн Дж

Ответы:


12

Вы должны убедиться, что в вашем /etc/apache2/users/username.conf есть следующее:

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

FollowSymlinks и AllowOverride необходимы здесь. Хотя вы намекаете на оба вопроса в своем вопросе, возможно, вы неправильно настроили их в тандеме.

Убедитесь, что файл httpd.conf /private/etc/apache2/extra/httpd-userdir.conf также включен. Это по умолчанию.

После любых изменений перезапустите веб-сервер, чтобы изменения вступили в силу.

Если у вас все еще есть проблемы, возможно, есть проблема с вашими настоящими правилами переписывания. Вы также использовали их в контексте .htaccess? Обратите внимание, что в .htaccess регулярное выражение правила перезаписи сопоставляется с URI запроса без косой черты и всегда относительно каталога, в котором находится .htaccess , тогда как в глобальном httpd.conf URI должен совпадать с косой чертой и относительно корня сети. Поскольку предположительно у вас есть .htaccess в подкаталоге ~ / Sites, ваши правила перезаписи могут вести себя иначе, чем когда .htaccess находится в веб-корне (виртуального) хоста.

Для отладки mod_rewrite вы можете включить перезапись журнала. Вы должны включить это в /etc/apache2/httpd.conf:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log

Спасибо, Джерри. Да, я попробовал это; просто попробовал еще раз; не работает к сожалению. Я не изменил .htaccess, он находится в ~ / Sites /…, как это было раньше. Это слишком расстраивает :(
Niels Heidenreich

Попробуйте включить перезапись журнала, как я исправил выше.
Джерри

ОК, это не проблема с mod_rewrite, как кажется; это файл .htaccess, который полностью игнорируется. Я могу поместить в нее любой мусор и не получаю сообщения об ошибке. Так что Apache не загружает его. Я проверил разрешения, они в порядке (файл доступен для чтения). Я пытался сделать его исполняемым, без изменений.
Нильс Хайденрайх

Если я помещаю .htaccess в / Library / WebServer / Documents и открываю " localhost ", чтобы проверить его, это работает как положено. Это просто не работает в "~ / Sites".
Нильс Хайденрайх

Я сделал что-то сумасшедшее и создал вторую учетную запись пользователя с логином «testitester». Я установил для AllowOverride значение All в .conf этого пользователя. Я поместил .htaccess, содержащий мусор, в папку «Сайты» этого пользователя. Если я захожу в localhost / ~ testitester, я получаю ошибку 500, как и ожидалось.
Нильс Хайденрайх

1

Добавление параметров + FollowSymLinks работал хорошо для меня

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule

с чем это связано Options +FollowSymLinks? Я просто добавляю эту строку, она работает для меня
Kannika

1

Я столкнулся с подобной проблемой, когда мой файл .htaccess полностью игнорировался, находясь в подпапке в моем каталоге ~ / Sites в VirtualHost, который был настроен правильно.

Проведя последний час, играя с различными файлами конфигурации и устанавливая AllowOverride All в разных местах, я наконец-то обнаружил, что файл .htaccess, хотя он был похож на файл .htaccess в Finder, на самом деле был файлом .htaccess.txt с расширение скрыто.

Чтобы проверить и изменить файл .htaccess, щелкните его правой кнопкой мыши и выберите «Получить информацию», а затем обязательно удалите любое ведущее расширение с конца, такое как у меня:

И теперь это работает!


1

Ниже .htaccess записи исправить для меня

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>

0

Поместите .htaccess в / Library / WebServer / Documents и откройте «localhost /»; чтобы проверить это, работает как ожидалось. Это просто не работает в "~ / Sites". Спасибо Нильсу Хайденрайху за это!


-1

Когда вы печатаете: / Users / username / app_name

/ Относится к корню веб-сервера:

«Локальный /»

Если вы используете / ~ username / app_name в перезаписи, это должно работать.


1
Пути, начинающиеся с /, всегда являются абсолютными путями для Apache, см. Определение корня веб-сервера в http.conf ( <Directory "/Library/WebServer/Documents">)
nohillside
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.