如何隐藏URL GET参数(http://domain.com/MyFirstYii/page?view=about)。我搜索过很多帖子。他们都在谈论重写和URL管理器,但我无法实现我想要的。 :(
我的情景是,
我只是想隐藏URL GET参数。
例如:
http://domain.com/MyFirstYii/page***?view=about***
我想要隐藏***?view=about***
。
然后,网址应如下http://domain.com/MyFirstYii/page
。像http://domain.com/MyFirstYii/post
这样的其他网页。简单来说,我的GET参数应该像POST参数一样。
先谢谢。
编辑:
我想在 URLManager 中创建一些规则,但是哪种规则会隐藏GET参数。
答案 0 :(得分:2)
\ w 表示“单词”字符,而“my-prety-page”这样的url部分将不匹配。 要隐藏GET参数,您必须改进urlManager规则。您可以使用SEF网址为页面编写此类规则:
'<controller:\w+>/<id:\d+>/<title:[^\/]*>/*' => '<controller>/view'
在这种情况下输入网址
http://example.com/page/12/my-prety-title
将调用Page控制器以id和title作为参数执行视图操作。如果您输入此网址,则相同:
http://example.com/page/view?id=12&title=my-prety-title
规则中的最后一部分/*
允许保留其他参数。例如。如果你的地址是
http://example.com/user/55/john-doe-junior/foo/bar/
在UserController
的{{1}}中你可以写
actionView
你会看到
echo '<pre>' ;
print_r($_GET);
echo '</pre>' ;
die();
答案 1 :(得分:0)
从main.php取消注释这些行
'urlManager'=>array( 'urlFormat'=>'path', 'showScriptName'=>false, 'rules'=>array( 'MyFirstYii/post/<view>'=>'MyFirstYii/post', '<controller:\w+>/<id:\d+>'=>'<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', ), ),
将.htaccess文件放在项目的根目录中并编写以下代码
RewriteEngine on # if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # otherwise forward it to index.php RewriteRule . index.php
答案 2 :(得分:0)
将此网址规则添加到网址规则的顶部:
'page/<view:\w>' => 'user/page'
我假设下一个:
如果我的假设有误,请提供正确的控制器名称和操作名称,以便我可以解决问题。
更新: 基于评论的固定控制器名称
UPDATE2:
如果您希望这适用于控制器中的所有操作,请使用:
'<action:\w>/<view:\w>' => 'user/<action>'
答案 3 :(得分:-3)
如果您打算使用GET并且需要这些参数,则无法隐藏它,因为这是GET的工作方式。如果您确实需要隐藏参数,则必须切换到POST,因为参数将在请求有效负载中而不是在url中传递。
答案 4 :(得分:-3)
使用post方法而不是get ....这是最好和最有效的解决方案。
跟进您的查询,请查看此网站:
[http://pure-essence.net/2007/06/29/simple-php-path-rewrite/]