【问题标题】:Zend Framework: strange url rewrite behaviorZend Framework:奇怪的 url 重写行为
【发布时间】:2010-10-12 06:20:54
【问题描述】:

我的 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

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

另一件事是注入的 index.php 与示例中的 url 编码获取参数中的 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]

【问题讨论】:

  • 尝试启用mod_rewrite的日志功能(见RewriteLogLebel指令)。

标签: zend-framework mod-rewrite routing


【解决方案1】:

您尝试调试的方式并没有投入太多,所以我徘徊到我自己的本地主机并试了一下您的网址。低,看我做同样的事情,我尝试了两种不同的 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 中,它工作正常,仔细检查在 url 中有 main.php 不会把它弄乱,它不会。

因此,尽管没有做出任何承诺,但如果您将 index.php(被写入并包含您的引导程序)重命名为 main.php 或任何您喜欢的名称,并在您的 modrewrite 中反映出来,您应该一切就绪!

祝你好运!

【讨论】:

    【解决方案2】:

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

    Options -MultiViews
    

    【讨论】:

    • 我将项目别名中的 Options All for 更改为 Options All -MultiViews 如果这是您的意思,但它没有帮助。我认为它们无论如何都没有启用。
    • 我不知道这个符号是否被允许。所以试着把它们分成两个声明。
    • 你试过RewriteLogLevel看看内部处理吗?
    猜你喜欢
    • 2011-07-09
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多