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