2013-06-25 10 views
0

У меня есть три веб-сервера на трех отдельных компьютерах. Я пытаюсь установить приложение 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] 

Это не имеет смысла для меня ... Может ли кто-то помочь?

Благодаря

+0

Включен ли на третьем веб-сервере mod_rewrite? – faffaffaff

+0

@faffaffaff yes – jerry

+0

Установлен ли на третьем веб-сервере AllowOverride достаточно высокий уровень для каталога, в который помещен ваш .htaccess? – faffaffaff

ответ

0

Таким образом, на основании выше ошибок, я могу сказать, что это на самом деле пытается редирект на index.php. Но файл, который перечисляет браузер в списке /full/path/..., на самом деле находится на моем веб-сервере, поэтому я не знаю, , почему он не может его найти.

Предполагая, что это система * nix, вы можете проверить права доступа к файлам и убедиться, что веб-сервер имеет доступ к чтению.

+0

Я проверил разрешения, и они верны. Хорошая идея, хотя – jerry

+0

@jerry Что такое операционная система на сервере? В случае сервера Linux , в котором дистрибутив – masnun

+0

операционной системой является CentOs. Также похоже, что проблема связана с параметром DocumentRoot в httpd.conf. См. второе редактирование на мой вопрос. – jerry

0

Вы также должны проверить параметр DocumentRoot в httpd.conf Ищите что-то в этом файле и убедитесь, что оно правильно.Это также, где apache будет получать его.

DocumentRoot "/var/www/html/path/to/whatever" 

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