2012-03-09 39 views
12

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

UPDATE:

这是我的.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 
+2

那么,你不觉得显示你htacess会帮助,而不是一个图像.... – 2012-03-09 11:59:16

+1

我确定YII文档也涵盖了这一点。 – hakre 2012-03-09 11:59:43

+2

确保你已经'mod_rewrite' – Shiki 2012-03-09 12:01:12

回答

5

如果你也想从主网页URL删除/index,加''=>'site/index'到你的urlManager规则的顶部,就像这样:

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

直接从yii documentation

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

我们首先需要配置Web服务器,以便输入脚本仍然可以处理没有输入脚本的URL。对于Apache HTTP服务器,这可以通过打开URL重写引擎并指定一些重写规则来完成。我们可以使用以下内容创建文件/wwwroot/blog/.htaccess。请注意,相同的内容也可以放在/ wwwroot/blog目录元素中的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财产配置是假的。现在如果我们调用$ this-> createUrl('post/read',array('id'=> 100)),我们将获得URL/post/100。更重要的是,这个URL可以被我们的Web应用程序正确识别。

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

0

我刚刚遇到这个线程,但发现为了让它工作,我不仅要遵循指令添加.htaccess文件,而且还必须从我的主配置文件(\保护\配置\ 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>', 
     ), 
    ), 
3

做这些3个步骤:

  1. 开启Apache网址重写。

  2. 地方。你的项目的根htaccess的

RewriteEngine叙述上

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

RewriteRule . index.php 
  1. 在配置保护/配置/ main.php集showScriptName假像这样您的网址管理器组件> > urlManager
'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, 
) 
0

我今天也有这个问题,当时我把项目转移到了linux服务器上。我做了所有显示的方式,但没有帮助。然后,我复制.htaccess文件到保护目录也,然后它的工作。

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] 

d其中一个...希望它能正常工作

0

确保如果在更改.htaccess & urlManager之后,如果它似乎仍然不适用于您的任何人,那么您是否已经修改了根目录的AllowOverride参数在Apache httpd.conf文件中改为“全部”而不是“无”。修改后重新启动apache。因为这是一个让阿帕奇决定什么所有参数可以在.htaccess文件被覆盖

0

修改Apache的配置值

的AllowOverride无人的AllowOverride ALL

中的httpd

参数.conf或httpd-vhosts.conf