代码之家  ›  专栏  ›  技术社区  ›  Josef Sábl

zend框架:奇怪的url重写行为

  •  3
  • Josef Sábl  · 技术社区  · 15 年前

    我的zend框架应用程序出现了奇怪的行为。

    我运行这个url,希望让index controller运行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个字符,它与 指数/ 123 4567890字符串以获取错误的控制器名称。

    另一件事是,注入的index.php与示例中url编码的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 回复  |  直到 15 年前
        1
  •  3
  •   Erling Thorkildsen    15 年前

    你没有太多的地方,你已经试图调试这一点,所以我徘徊到我自己的本地主机,并给你的网址一个机会。我也做了同样的事情,我尝试了两种不同的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中向发送请求。

    因此,我将main index.php文件改为main.php,分别在modrewrite中改为main.php,它运行良好,再次检查了url中的main.php不会弄乱它,也不会弄乱它。

    因此,虽然没有承诺任何事情,但如果您将index.php(它将被写入并包括引导程序)重命名为main.php或任何您喜欢的名称,并在modrewrite中反映出这一点,那么您就应该做好一切准备!

    祝你好运!

        2
  •  0
  •   Gumbo    15 年前

    MultiViews 可能导致这种行为。尝试禁用它:

    Options -MultiViews