4

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

4

5 回答 5

3

正则表达式中的\w表示“单词”字符,并且诸如“my-prety-page”之类的 url 部分将不匹配。要隐藏 GET 参数,您必须改进 urlManager 规则。您可以使用 SEF url 为页面编写这样的规则:

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

在这种情况下,当您输入 url

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

页面控制器将被调用以执行以 id 和 title 作为参数的视图操作。如果你输入这个 url 也是一样的:

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

规则的最后一部分/*允许保留额外的参数。例如,如果您的地址是

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
)
于 2013-06-13T13:58:47.477 回答
0

将此 url 规则添加到 url 规则的顶部:

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

我假设下一个:

  • 控制器名称:用户控制器
  • 动作名称:actionPage

如果我的假设是错误的,请提供正确的控制器名称和操作名称,以便我修复答案。

更新:根据评论固定控制器名称

更新2:

如果您希望它适用于控制器中的所有操作,请使用:

'<action:\w>/<view:\w>' => 'user/<action>'
于 2013-06-13T12:46:26.653 回答
0

从 main.php 取消注释这些行

'urlManager'=>数组(
                        'urlFormat'=>'路径',
                        'showScriptName'=>假,
                        '规则'=>数组(
                                'MyFirstYii/post/<view>'=>'MyFirstYii/post',
                                '<控制器:\w+>/<id:\d+>'=>'<控制器>/view',
                                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                                '<控制器:\w+>/<动作:\w+>'=>'<控制器>/<动作>',
                        ),
                ),

并将 .htaccess 文件放在项目的根目录中并编写以下代码

重写引擎开启

# 如果目录或文件存在,直接使用
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 否则转发到 index.php
重写规则。索引.php
于 2013-06-13T12:11:33.500 回答
-3

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

要跟进您的查询,请查看此网站:

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

于 2013-06-13T12:16:33.317 回答
-3

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

于 2013-06-13T12:14:15.910 回答