YII URL如何生成新的URL

时间:2014-06-22 16:21:27

标签: php yii url-rewriting yii-routing

我有一个网站,其中我想要SiteURL/about.html.

这样的网址

我更改了config/main.php中的代码,但是当我登录到网站时,当我导航到任何其他网页时,会话已过期。

如果在'showScriptName'=>false文件中对此代码config/main.php发表评论,那么它的工作正常,现在我的登录会话已保存,但我们尚未过期,但现在我的网址变得像这样SiteURL/index.php/about.html

但我想要像about.html.

这样的网址

我还有另一个游戏选项控制器,其URL类似于:http://www.demo.com/index.php/Games/info/9.html但我希望像这个“黑钩”中的SiteURL / black-hook.html这样的URL是游戏的名称。

'urlManager'=>array( 
          'urlFormat'=>'path', 
          'showScriptName'=>FALSE, 
          'rules'=>array(
                 '<action>'=>'site/<action>',
                 '<view>'=>'array('site/page')',
                 '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                 '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                 '<controller:\w+>/<action:\w+>'=>'<controller>/<action>'
           ), 
     ),

* SiteURL = http://www.demo.com

1 个答案:

答案 0 :(得分:0)

首先将.html添加到您的页面中,您需要在urlManager中使用伪url后缀选项

可以通过将'urlSuffix' =>'.html'添加到您的urlManager配置中来完成此操作

'urlManager'=>array( 
          'urlFormat'=>'path', 
          'showScriptName'=>false, 
           'urlSuffix'=>'.html',
          'rules'=>array(
                 '<action>'=>'site/<action>',
                 '<view>'=>'site/page',
                 '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                 '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                 '<controller:\w+>/<action:\w+>'=>'<controller>/<action>'
           ),
     ),

其次,除了在此处更改配置外,还要在URL中隐藏index.php(称为条目脚本),您需要更改apache / nginx服务器中的配置。

使用以下内容创建文件/.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

接下来验证apache配置文件中的app目录是否有AllowOveride All您还可以使用Directory元素将上述配置直接添加到apache配置文件,而不使用.htaccess。 注意:为此,您需要在apache配置中启用重写引擎,您可以使用以下命令集来执行此操作

a2enmod rewrite

最后在

之后重启apache2
/etc/init.d/apache2 restart

service apache2 restart