2010-08-24 2 views
0

Я настраиваю приложение Zend и прохожу основные шаги по настройке modrewrite на моей станции разработки и записи файла .htaccess (показано ниже). Теперь, когда я иду в корень моего проекта, Zend работает правильно, вызывая контроллер и отображая соответствующую страницу.Zend и modrewrite не работают вместе правильно

Однако, когда я вызываю какой-либо контроллер, я ожидаю, что он перенаправит тот же файл index.php, который, в свою очередь, направит его на соответствующий контроллер и действие (например, myurl/controller/action будет прочитан myurl /index.php, который затем будет перенаправлен на действие соответствующим образом).

Я подозреваю, что проблема каким-то образом связана с тем, как я настроил свой файл .htaccess, поскольку вызов базового url работает правильно. Но я не смог понять, что случилось. У кого-нибудь есть предложение?

Options +FollowSymLinks 
RewriteEngine On 

RewriteBase/

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 

RewriteRule ^.*$ - [NC,L] 
RewriteRule ^(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^(.*)/(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^(.*)/(.*)/(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 
+0

Что происходит вместо этого? Вы направляетесь к действию индекса ErrorController или? –

+0

Нет, я получаю ошибку 404. В частности, «Запрошенный URL /index.php не найден на этом сервере». – Elie

+1

Ох ... Это странно. Является ли приложение в 'DOCUMENT_ROOT' или подкаталоге? –

ответ

1

Хорошо, вот что это было.

My DOCUMENT_ROOT установлен в/var/www, в то время как мое приложение заканчивается/var/www/app1 со всем, что там установлено. Из-за строки RewriteBase / она перенаправлялась к DOCUMENT_ROOT, а не к APPLICATION_ROOT. Я установил его, изменив эту линию на:

RewriteBase /app1 

и теперь все работает отлично.

+1

(Извините, пошел на обед, а затем на встречу) Ах, конечно, «RewriteBase». [Документация по модулю] (http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase) предполагает, что в большинстве случаев это необходимо, но это, как правило, неверно (все должно было хорошо работать если вы вообще его не указали), поэтому я считаю, что это немного вводит в заблуждение. В любом случае, хороший улов, +1 –

+0

Спасибо! Ваш комментарий о DOCUMENT_ROOT привел меня к этому, так как у меня есть несколько сайтов, запущенных с моего одного сервера Apache, но только этот использует modrewrite на данный момент. – Elie

+0

Я ошибаюсь, чтобы думать, что DocumentRoot должен быть установлен в/var/www/app1/public? – Herbert

Смежные вопросы