Zend Framework:奇怪的url重写行为

时间:2009-03-09 18:23:20

标签: zend-framework mod-rewrite routing

我的Zend Framework应用程序遇到了奇怪的行为。

我运行这个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

请注意,错误地注入到URL中的index.php字符串有9个字符,与获取错误控制器名称的 index / 123 4567890字符串相同的数字相同。

另一件事是注入的index.php与示例中url encoded get参数中的index.php相关。

有什么问题?这是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 个答案:

答案 0 :(得分:3)

你没有太多考虑你试图调试的方式,所以我徘徊到我自己的localhost并给你的网址一个镜头。低,看见我做同样的事情,我尝试了两种不同的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]

他们俩都在做同样的事情。花了很长时间玩网址并查看我的错误页面上的请求参数是什么样的所有我能想到的是Zend Framework中的默认路由模式中存在一个重大故障,或者有一些关于使用你的modrewrite在url中发送请求的文件名。

所以我将我的主index.php文件分别更改为main.php和我的modrewrite,并且工作正常,双重检查,在url中使用main.php不会搞砸它并且不会。

所以虽然没有承诺任何东西,如果你将index.php(写入并包含你的引导程序)重命名为main.php或任何你想要的东西并反映在你的modrewrite中你应该全部设置!

祝你好运!

答案 1 :(得分:0)

MultiViews可能会导致此行为。尝试禁用它:

Options -MultiViews