2012-03-09 71 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