.htaccess rewriterule некорректно работает на mac

#php #macos #apache #.htaccess #mod-rewrite

#php #macos #apache #.htaccess #мод-перезапись

Вопрос:

У меня есть проект веб-сайта на моем mac book 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/добро пожаловать, index.php выполняет некоторые операции и находит нужный контроллер и нужную страницу.

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

Не найдено

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

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

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

 <ifModule mod_rewrite.c>
RewriteEngine On

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

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

Комментарии:

1. Можете ли вы подтвердить, что модуль перезаписи был включен правильно?

2. да, я вижу их в разделе загруженных модулей phpinfo();

3. Не могли бы вы рассмотреть возможность изменения принятого ответа? Тот, который вы приняли, на самом деле неверен. Ответ @tong правильный.

Ответ №1:

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

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

 RewriteEngine On

RewriteBase /~username/YOURPath

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

Комментарии:

1. Фантастика! Я потратил около трех часов, пытаясь разобраться в этом. Спасибо!

2. я столкнулся с той же проблемой, но это сэкономило мое время, поэтому 1

3. Это должен быть принятый ответ, поскольку он правильный — база перезаписи всегда должна быть установлена. Изменение DocumentRoot является взломом (и было бы невозможно из .htaccess на хорошо настроенном сервере).

4. У меня та же проблема, но база перезаписи не работает AH00526: Синтаксическая ошибка в строке 8 из /usr/local/etc/apache2/2.4/sites-enabled/example.com.conf: База перезаписи: допустима только в файлах конфигурации для каждого каталога

Ответ №2:

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

 <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 .

если ваш «index.php-less pretty URL» отсутствует в вашем корне документа, добавьте следующий каталог RewriteBase в ваш файл .htaccess, где ваш index.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 и надейтесь, что все в порядке.
Надеюсь, это поможет.

Ответ №3:

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

 DocumentRoot "/~username/site/"
 

Ответ №4:

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

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

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

Стал RewriteRule ^Register register.php

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

Ответ №5:

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

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

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

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

Ответ №6:

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