2013-06-13 121 views
4

如何隐藏URL GET参数(http://domain.com/MyFirstYii/page?view=about)。我搜索了很多帖子。他们都在说重写和URL管理器,但我无法实现我想要的。 :(从URL隐藏GET参数

我的情况是,

我只是想隐藏URL GET参数

例如:。

http://domain.com/MyFirstYii/page***?view=about*** 

我想躲***?view=about***

那么URL应该看起来像这样http://domain.com/MyFirstYii/page。像这样的其他页面http://domain.com/MyFirstYii/post。简单地说,我的GET参数应该像POST参数RS。

在此先感谢。

编辑:

我想创建的URLManager一些规则,但什么样的规则将隐藏GET参数。

+0

什么是只使用'POST'取代'问题GET'? – enenen

+1

这没有任何意义。网址是网址; HTTP请求中不包含其他用户控制的数据。考虑使用URL重写。 – SLaks

+0

我也想在'href'中使用。那里我不能使用POST? –

回答

2

\ W在正则表达式的意思是“单词”字符,而像“我的优先页”这样的URL部分不匹配。 要隐藏GET参数,您必须改进您的urlManager规则。当你输入网址

http://example.com/page/12/my-prety-title 

页面控制器将被要求通过ID和标题作为参数进行视图操作

'<controller:\w+>/<id:\d+>/<title:[^\/]*>/*' => '<controller>/view' 

在这种情况下:你可以写使用SEF网址的网页这样的规则。

http://example.com/page/view?id=12&title=my-prety-title 

最后一部分/*在规则允许保留更多的PARAMS:如果你进入这个网址,却是一样的。例如。如果你的地址是

http://example.com/user/55/john-doe-junior/foo/bar/ 
UserControlleractionView

你可以写

echo '<pre>' ; 
print_r($_GET); 
echo '</pre>' ; 
die(); 

,你会看到

Array 
(
    [id] => 55 
    [title] => john-doe-junior 
    [foo] => bar 
) 
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 
+0

这些都是基本的重写选项,我已经取消注释这些东西了。即使它显示'网站/页面?查看=约'URL –

+0

这只改变url格式并隐藏index.php参数 –

+0

是的,我想隐藏'?view = about'。 :( –

-3

如果您打算使用GET和需要这些参数,你不能隐藏它,因为这是GET的工作方式。如果您确实需要隐藏参数,则必须切换到POST,因为参数将传递到请求负载中而不是在url中。

+0

他说他是动态地将url的锚定标签。这里没有post方法和get方法的工作原理 – saikiran

-3

使用post方法而不是get ....这是最好的和有效的解决方案。

跟进您的查询看看这个网站:

[http://pure-essence.net/2007/06/29/simple-php-path-rewrite/]

+0

使用'GET'方法比'POST'快。因此,'POST'不是一个有效的解决方案。 “POST”的主要优点是可以在传输过程中隐藏敏感信息,并且可以帮助传输大量数据。 – Kevin

+0

伙计,请停下来。没有什么可以在这里发布......我不能相信每个人都在谈论使用POST而不是GET。它没有任何意义! – MrSoundless

+1

@MrSoundless OP的问题(在编辑之前)是关于“隐藏URL”。 (请参阅编辑历史http://stackoverflow.com/posts/17086732/revisions)。那么,现在应该对你有意义! – Kevin

0

添加这个URL规则的您的网址规则的顶部:

'page/<view:\w>' => 'user/page' 

我假设在未来:

  • 控制器名称:UserController的
  • 动作名称:actionPage

如果我的假设是错误的,请提供正确的控制器名称和动作名称,这样我就可以解决问题的答案。

UPDATE: 固定控制器名称基于评论

UPDATE2:

如果您希望这对您的控制器的所有操作工作,使用:

'<action:\w>/<view:\w>' => 'user/<action>' 
+0

我的控制器是'UserController',动作名称是'page' –

+0

也为你改变:) – MrSoundless

+0

还添加了第二个规则,你可以使用,而不是第一个,根据你的需要。让我知道它是如何工作的,因为我无法在这里测试它。 – MrSoundless