У меня есть три веб-сервера на трех отдельных компьютерах. Я пытаюсь установить приложение php, которое перезаписывает все запросы url к index.php (шаблон контроллера). Следующий .htaccess работает на двух из трех веб-серверов:htaccess переписать - не переписывать index.php
RewriteEngine On
# Redirect everything to the Front Controller
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^(css|images|files)/ index.php [NC,L]
Так что, когда я посещаю http://example.com/hithere
, index.php называется, и я могу затем разобрать первоначально запрошенной URL (hithere
), чтобы выяснить, что контроллер отправить его.
Однако по неизвестной причине вышеуказанный файл .htaccess не работает на третьем веб-сервере. Вместо этого, когда я получить доступ к http://example.com/hithere
, я получаю 404 не найдена ошибка в браузере, который говорит так:
The requested URL /full/path/to/application/index.php was not found on this server.
Таким образом, на основании выше ошибок, я могу сказать, что это на самом деле пытается перенаправить на index.php. Но файл, который браузер перечисляет в /full/path/...
ниже, на самом деле находится на моем веб-сервере, поэтому я понятия не имею, почему он не может его найти. Может кто-нибудь, пожалуйста, помогите мне и скажите мне, что я делаю неправильно?
Edit: Я не знаю, если что-то в httpd.conf может быть противоречивыми, но вот настройки, которые я имею в httpd.conf для каталога, что это приложение в
Alias /myapp /full/path/to/my/app
<Directory /full/path/to/my/app>
Order allow,deny
AllowOverride All
Allow from all
</Directory>
Редактировать 2: Я заметил что-то своеобразное в журналах Apache. Это выглядит Апач добавления index.php, который я пытаюсь перенаправить трафик, на DocumentRoot:
File does not exist: /document/root/full/path/to/my/app/index.php
Когда следует собирается:
/full/path/to/my/app/index.php
Так что я в основном нужно сказать HTAccess чтобы игнорировать корень документа. Я попробовал это, указав это в моем файле .htaccess:
RewriteBase /full/path/to/my/app/
Но это все еще ищет корень документа для index.php:/Есть ли способ сбросить DocumentRoot или сказать HTAccess игнорировать его при перезаписи индексировать .php? Даже когда я использую абсолютный путь в RewriteRule, он все еще добавляет его в корень документа.
RewriteEngine On
# Redirect everything to the Front Controller
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^(css|images|files)/ /full/path/to/my/app/index.php [NC,L]
Это не имеет смысла для меня ... Может ли кто-то помочь?
Благодаря
Включен ли на третьем веб-сервере mod_rewrite? – faffaffaff
@faffaffaff yes – jerry
Установлен ли на третьем веб-сервере AllowOverride достаточно высокий уровень для каталога, в который помещен ваш .htaccess? – faffaffaff