Zend / Apache mod_rewrite ......出了什么问题?

时间:2009-05-14 19:40:59

标签: php zend-framework .htaccess mod-rewrite

以下网址正常:

http://localhost/index/index/

但是,当他们这样进来时,我无法_get $变量:

http://localhost/index/index/test/1234/test2/4321

- 丁 -

但是,我可以通过这些方式_get $变量:

http://localhost/index.php?test=1234&test2=4321
http://localhost/index?test=1234&test2=4321
http://localhost/index/index?test=1234&test2=4321

当我使用/ index / index / var / val方式时,为什么变量没有出现?

下面你会找到我的.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)

Zend Framework不会将请求中的数据uri作为$ _GET变量提供,要访问它们,请使用控制器中的键

$test = $this->getRequest()->getParam('test') //$test = 1234

或更短

$test = $this->_getParam('test');

答案 1 :(得分:0)

因为$_GET包含查询字符串中的变量 - 这是问号后面的URL部分。请注意,.htaccess文件中的重写规则将所有 URL(不引用现有文件或目录)转换为index.php,而没有任何原始URL的痕迹(但是,正如Gumbo的评论提醒我的那样,它仍然可以通过$_SERVER['REQUEST_URI']访问。你的RewriteRule没有创建查询字符串(即他们没有在URL中添加问号),这就是你的' d需要使用$_GET

我建议用

之类的内容替换上一个RewriteRule
RewriteRule ^.*$ index.php$0 [NC,L]

$0会将原始网址附加到index.php - 例如,http://localhost/index/index/test/1234/test2/4321将成为http://localhost/index.php/index/index/test/1234/test2/4321然后该请求将由index.php处理, $_SERVER['PATH_INFO']变量将设置为原始网址/index/index/test/1234/test2/4321。您可以编写一些PHP代码来解析它并选择您想要的任何参数。

如果您不希望将开头的/index/index保存在path_info变量中,则可以使用RewriteRule这样的代码:

RewriteRule ^/index/index(.*)$ index.php$1 [NC,L]

RewriteRule ^(/index)*(.*)$ index.php$2 [NC,L]

删除任意数量的潜在/index es。

编辑:实际上,您可以保留现有的RewriteRule,只需查看$_SERVER['REQUEST_URI']即可获取原始请求URI;不需要弄乱路径信息。然后你可以在PHP中将其拆分。