Zend Framework: странное поведение переписывания URL - PullRequest
3 голосов
/ 09 марта 2009

У меня странное поведение с приложением Zend Framework.

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

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

Я, однако, получаю исключение следующим образом:

Message: Invalid controller specified (4567890) 

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

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

Вместо:

http://hello.com/index/1234567890

Обратите внимание, что строка index.php, которая ложно вводится в URL-адреса, имеет 9 символов, это то же число, что и строка index / 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]

Ответы [ 2 ]

3 голосов
/ 18 марта 2009

Вы не особо старались отладить это, поэтому я забрел на свой локальный хост и дал вашему URL шанс. Низкий и вот мой делает то же самое, я попробовал два разных метода 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, либо что-то странное с имя файла, на который ваш modrewrite отправляет запросы в URL.

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

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

Удачи!

0 голосов
/ 09 марта 2009

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

Options -MultiViews
...