如何在Yii Framework中删除index.php

时间:2012-03-09 11:55:07

标签: php url yii

enter image description here嘿guyz我是Yii框架中的新手。我想从我的网址中删除index.php。在yii文档之后,当我将重写引擎代码放入我的.htaccess文件并在我的config / main.php文件中将showScriptName设置为false时,我得到500内部服务器错误。我的.htaccess文件位于我的应用程序的根文件夹中。告诉我我在哪里做错了

更新

这是我的.htaccess文件中的代码:

# 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

9 个答案:

答案 0 :(得分:15)

试试这个

这里有一个很好的描述

http://www.yiiframework.com/doc/guide/1.1/en/topics.url#hiding-x-23x

答案 1 :(得分:6)

如果您还想从主页网址中删除/index,请将''=>'site/index'添加到您的urlManager规则的顶部,如下所示:

'urlManager'=>array(
    'urlFormat'=>'path',
    'showScriptName' => false,
    'rules'=>array(
        ''=>'site/index',
        '<action>'=>'site/<action>',

答案 2 :(得分:3)

直接从yii documentation

获取
  

隐藏index.php   我们还可以做一件事来进一步清理我们的URL,即在URL中隐藏入口脚本index.php。这要求我们配置Web服务器以及urlManager应用程序组件。

     

我们首先需要配置Web服务器,以便入口脚本仍然可以处理没有条目脚本的URL。对于Apache HTTP服务器,可以通过打开URL重写引擎并指定一些重写规则来完成此操作。我们可以使用以下内容创建文件/wwwroot/blog/.htaccess。请注意,相同的内容也可以放在/ wwwroot / blog的Directory元素中的Apache配置文件中。

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
  

然后我们将urlManager组件的showScriptName属性配置为false。

     

现在,如果我们调用$ this-&gt; createUrl('post / read',array('id'=&gt; 100)),我们将获得URL / post / 100。更重要的是,我们的Web应用程序可以正确识别此URL。

希望这有帮助,因为也解决了我的问题。

答案 3 :(得分:3)

执行以下3个步骤:

  1. 在Apache上重新编写Url。

  2. 将.htaccess放在项目的根目录

  3.   

    上的RewriteEngine
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    RewriteRule . index.php
    
    1. 在您的配置中,protected / config / main.php将showScriptName设置为false,这样就是您的网址管理器组件&gt;&gt; urlManager
    2. 'urlManager'=>array(
        'urlFormat'=>'path',
        'rules'=>array(
            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ),
        'showScriptName'=>false,
      )
      

答案 4 :(得分:1)

更改你的config / main.php,如下所示:

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

然后将您的htaccess文件放在带有受保护文件夹的基本目录中(它可能位于受保护的文件夹中) 将代码放在你的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

或试试这个---

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]

完成...希望它能够运作

答案 5 :(得分:0)

我刚遇到这个帖子,但发现为了让它工作,我不仅要按照说明添加.htaccess文件,而且还必须从我的主配置文件(\ protected \ config)取消注释下面的部分\ main.php):

        // uncomment the following to enable URLs in path-format

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

答案 6 :(得分:0)

今天我把项目转移到linux服务器时也遇到了这个问题。我做了所有展示的方式,但没有帮助。然后,我已将 .htaccess 文件复制到 受保护的 目录,然后就可以了。

答案 7 :(得分:0)

如果您对.htaccess&amp;的更改完成后,请确保urlManager,如果它似乎对你们任何人都没有用,那就是你已经将Apache httpd.conf文件中根目录的AllowOverride参数修改为&#34; All&#34;而不是&#34;无&#34;。修改后重启apache。因为这是让apache决定在.htaccess文件中可以覆盖所有参数的参数

答案 8 :(得分:0)

修改apache配置值

  
    

AllowOverride none to AllowOverride ALL

  

在httpd.conf或httpd-vhosts.conf