以下网址正常:
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]
答案 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中将其拆分。