.htaccess rewriterule не работает правильно на Mac - PullRequest
8 голосов
/ 30 октября 2011

У меня есть проект веб-сайта на моем MacBook Pro Leopard, и я использую встроенные apache2 и php.Я сделал свои конфигурации в httpd.conf и user.conf для использования htaccess.Изменения сделаны следующим образом:

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

<Directory >
    AllowOverride All
</Directory>

Проблема в том, что когда я хочу открыть сайт, например localhost / ~ username / site / site / index.php / welcome, index.php выполняет некоторые операции и находит нужный контроллери правильная страница.

Но когда я пытаюсь зайти на сайт, как site / welcome, apache выдает мне следующую ошибку:

Not Found

Запрошенный URL-адрес Users / username / Sites / site / index.php / welcome не был найден на этом сервере.

Проблема в том, что apache получает это, как будто это действительно файл, а оператор ошибки дает его в файловой системе, но этот запрос должен быть выбран для индексации.php вместо этого.

мой файл .htaccess выглядит следующим образом

<ifModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]
</ifModule>

Что беспокоит меня, что эта конфигурация работает как в Linux, так и в Windows, но не работает на Mac.Я чувствую себя обреченным:)

Ответы [ 6 ]

15 голосов
/ 24 мая 2012

Я тоже столкнулся с той же проблемой!«DocumentRoot» не работает для меня в Lion.

Но это работает:

RewriteEngine On

RewriteBase /~username/YOURPath

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]
6 голосов
/ 11 ноября 2012

В Mac OSX Mountain Lion убедитесь, что для AllowOverride установлено значение All в каталоге /

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
</Directory>

и в корневом каталоге корневого пути вашего документа:

<Directory "/Library/WebServer/Documents">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

также убедитесь, что FollowSymLinks включен в Options.

, если ваш «красивый URL-адрес без index.php» отсутствует в DocumentRoot, а затем добавьте следующий каталог RewriteBase в файл .htaccess, где находится ваш индекс.php существует, как в следующем примере:

RewriteBase /~username/site/site/

Если вы хотите изменить имя файла .htaccess на другое, например .acl или htaccess.txt, раскомментируйте следующую строку в вашем httpd.conf

# Various default settings
Include /private/etc/apache2/extra/httpd-default.conf

и измените .htaccess в директиве AccessFileName на что угодно в файле extra/httpd-default.conf.Например, если вы хотите изменить .htaccess файл на htaccess.txt, измените его на:

AccessFileName htaccess.txt

сохраните их, перезапустите ваш веб-сервер apache на OSX Mountain Lion и надеемся, что у вас все получится.Надеюсь, это поможет.

4 голосов
/ 03 января 2012

Вам необходимо добавить следующую строку в ваш файл .htaccess:

DocumentRoot "/~username/site/"
2 голосов
/ 26 марта 2013

У меня просто была та же проблема, но приведенные выше решения у меня не сработали,

Удаление косой черты с самого начала принесло свои плоды (наверное, потому что мой браузер уже работает под правильным пользователем).

Итак, RewriteRule ^ Register /register.php

Стал RewriteRule ^ Register register.php

Это сводило меня с ума!Кстати, я использую xampp (apache 2) на Mac OS 10.8.

1 голос
/ 07 февраля 2018

У меня была такая же проблема, но для меня проблема была в том, что mod_rewrite не был включен.

Мне пришлось раскомментировать эти две строки в файле /etc/apache2/httpd.conf:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php7_module        libexec/apache2/libphp7.so

После этого не было необходимости использовать RewriteBase и т. Д.

0 голосов
/ 02 апреля 2014

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

...