分页小部件向前转换为'%2F'在URL中

时间:2015-11-15 07:12:52

标签: php url yii2

我遵循官方yii2文档,其中我们有tutorial,其中显示了如何使用分页与数据库进行交互。一切正常,但当我使用分页小部件转到下一页时,网址从index.php?r=country/index更改为index.php?r=country%2Findex&page=2。这让我很困惑:导致从/转换为%2F的原因是什么?为什么?此外,如果我将网址编辑为index.php?r=country/index&page=2,则行为没有变化。

也许这与浏览器/服务器有很大关系(我的是Ubuntu上的Apache2),但我不能说。有人会好好解释一下吗?

2 个答案:

答案 0 :(得分:2)

如果您不想要漂亮的网址,那么您至少可以关闭脚本名称:

'urlManager' => [
    'enablePrettyUrl' => false,
    'showScriptName' => false,

在配置的components部分。

当您打开漂亮网址时出现的错误是因为您尚未正确配置Apache。

您的网络目录中必须存在.htaccess,并且Apache必须在网站配置中包含Override all

Yii2 Guide on Pretty URLs

Yii2 Installation guide for Apache

编辑: 这是一个新的Yii2应用程序为我提供站点索引操作的URL:

http://yiipository.dev/index.php?r=site%2Findex

这就是Apache - 以及我猜的互联网 - 的运作方式。

所以答案是,不是分页小部件会对您的网址做出无法形容的事情。 :)

EDIT 这可能应该这样做:

<IfModule mod_rewrite.c>
    # Enable URL rewriting
    RewriteEngine On

    # Strip unwanted query strings from the url
    # RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^?]*)\? 
    # RewriteRule (.*) /$1? [R=301,L]

    # comment the next line out if you get trouble
    # RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

    RewriteRule .* index.php [L]

    RewriteCond %{THE_REQUEST} ^.*\/index\.php\ HTTP/
    RewriteRule ^(.*)index\.php$ /$1 [R=301,L]
</IfModule>

我不是Apache的专家 - 你怎么会这样? :P

答案 1 :(得分:0)

您可以使用

清除链接或解码%2F
rawurldecode('index.php?r=country%2Findex&page=2');

这将输出到index.php?r=country/index&page=2