从URL隐藏GET参数

时间:2013-06-13 12:09:30

标签: php url-rewriting yii

如何隐藏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参数。

5 个答案:

答案 0 :(得分:2)

regexp中的

\ 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'

我假设下一个:

  • 控制器名称:UserController
  • 操作名称:actionPage

如果我的假设有误,请提供正确的控制器名称和操作名称,以便我可以解决问题。

更新: 基于评论的固定控制器名称

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/]