如何隐藏URL GET参数(http://domain.com/MyFirstYii/page?view=about)。我搜索了很多帖子。他们都在说重写和URL管理器,但我无法实现我想要的。(
我的场景是,
我只是想隐藏URL GET参数。
,
http://domain.com/MyFirstYii/page***?view=about***
我想隐藏***?view=about***
。
那么URL应该是这样的http://domain.com/MyFirstYii/page
。其他类似http://domain.com/MyFirstYii/post
的页面。简单地说,我的GET参数应该像POST参数一样。
提前感谢。
编辑:我想在URLManager中创建一些规则,但是什么样的规则会隐藏GET参数
'w在regexp中表示" word "字符和url部分如" my- pretty -page "将不匹配。要隐藏GET参数,必须改进urlManager规则。您可以为使用SEF url的页面编写这样的规则:
'<controller:'w+>/<id:'d+>/<title:[^'/]*>/*' => '<controller>/view'
在这种情况下当你输入url
http://example.com/page/12/my-prety-title
一个Page控制器将被调用以id和title作为参数来执行视图操作。如果你输入这个url,也是一样的:
http://example.com/page/view?id=12&title=my-prety-title
最后一部分/*
in规则允许保留额外的参数。例如,如果你的地址是
http://example.com/user/55/john-doe-junior/foo/bar/
在UserController
的actionView
中你可以写
echo '<pre>' ;
print_r($_GET);
echo '</pre>' ;
die();
你会看到
Array
(
[id] => 55
[title] => john-doe-junior
[foo] => bar
)
从main.php中取消注释
<>之前"urlManager"=>阵列("urlFormat"=>"路径","showScriptName"=> false,"规则"=>阵列("MyFirstYii/post/& lt; view>=>"MyFirstYii/后",' & lt;控制器:' w +>/& lt; id: ' d +> ' =>> & lt;控制器/视图,' & lt;控制器:' w +>/& lt;行动:' w +>/& lt; id: ' d +> ' => '> & lt; controller>& lt;行动,' & lt;控制器:' w +祝辞/& lt;行动:' w +> ' => ' & lt; controller>& lt; action>",),),之前将。htaccess文件放到项目根目录下,并编写如下代码
<>之前RewriteEngine上#如果存在目录或文件,直接使用rewritecsecond %{REQUEST_FILENAME}rewritecsecond %{REQUEST_FILENAME}#否则转发到index.phpRewriteRule。index . php将此url规则添加到url规则的顶部:
'page/<view:'w>' => 'user/page'
我假设下一个:
- 控制器名称:UserController
- 动作名称:actionPage
如果我的假设是错误的,请提供正确的控制器名称和动作名称,以便我可以修复答案。
更新:修正了基于注释
的控制器名称更新2:
如果你想让它对控制器中的所有动作都起作用,使用:
'<action:'w>/<view:'w>' => 'user/<action>'
如果您打算使用GET并且需要这些参数,则无法隐藏它,因为这是GET的工作方式。如果你真的需要隐藏参数,你必须切换到POST,因为参数将在请求有效负载中传递,而不是在url中。
使用post方法代替get....这是最好、最有效的解决方案。
要跟进您的查询,请查看此网站:
[http://pure-essence.net/2007/06/29/simple-php-path-rewrite/]