2009-03-09 2 views
3

Я испытываю странное поведение с моим приложением Zend Framework.Zend Framework: странное поведение перезаписи URL-адресов

Я запустил этот URL-адрес, надеясь, что контроллер индекса начнет действие 1234567890.

http://hello.com/index/1234567890?test=http%3A%2F%2Fworld.com%2Findex.php 

Я же получить исключение, как это:

Message: Invalid controller specified (4567890) 

и странно все адреса, которые находятся на странице теперь ссылаются:

http://hello.com/index.php/index/1234567890 

Вместо:

http://hello.com/index/1234567890 

Обратите внимание, что string.php string th при ложном введении в URL-адреса имеет 9 символов, это то же самое число, что и вырезание строки /123 4567890, чтобы получить неправильное имя контроллера.

Другое дело, что инъецируемый index.php коррелирует с index.php в URL-кодированном параметре get из примера.

Что не так? Это ошибка в Zend? Или я делаю что-то неправильно?

Это мой .htaccess:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /index.php [NC,L] 
+0

Попробуйте enalbe функцию регистрации mod_rewrite (см. Директив RewriteLogLebel). – Gumbo

ответ

0

MultiViews может вызвать такое поведение. Попробуйте отключить его:

Options -MultiViews 
+0

Я изменил параметры Все в моем проекте псевдоним Options All -MultiViews, если это то, что вы имели в виду, но это не помогло. Я думаю, что они все равно не были включены. –

+0

Я точно не знаю, разрешено ли это обозначение. Поэтому попробуйте разбить их на две декларации. – Gumbo

+0

Вы пробовали RewriteLogLevel, чтобы увидеть внутреннюю обработку? – Gumbo

3

Вы не поставили много в пути вы пытались отладить это так, я подошел к моей локальный и дал свой адрес выстрел. Низкие и вот мое делает то же самое, я попробовал два разных метода modrewrite:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php 

И

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /index.php [NC,L] 

Они оба делали то же самое. Проведя довольно много времени, играя с URL-адресом и глядя на то, что параметры запроса выглядели на моей странице ошибок, я мог бы найти либо серьезный сбой в шаблонах маршрутизации по умолчанию в Zend Framework, либо что-то неудобное в использовании filename ваш modrewrite отправляет запросы в URL-адрес.

Итак, я изменил свой основной файл index.php на main.php и, соответственно, на мой modrewrite, и он отлично работает, дважды проверено, что наличие main.php в URL-адресе не испортит его, и это не так.

Так что, хотя вы ничего не обещаете, если вы переименуете свой index.php (который записывается и включает ваш загрузочный файл) в main.php или как вам угодно, и отразите, что в вашем modrewrite вы должны быть настроены!

Удачи вам!

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

  • Нет связанных вопросов^_^