2013-02-22 84 views
0

我該如何刪除index.php以便使URL欺騙CI可以被利用?當我刪除'index.php'時,它將通過404錯誤或403錯誤,即使控制器上存在必需的類。CodeIgniter中的htaccess問題

這裏是目前我的根的.htaccess:在config.php文件

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

其他CI規格:

$config['index_page'] = ''; 

$config['uri_protocol'] = 'AUTO'; 

的rewrite_module啓用。

在httpd.conf中:

<Directory /> 
Options FollowSymLinks 
AllowOverride None 
Order Allow,Deny 
Allow from all 
</Directory> 

編輯:要清楚,我可以訪問我的應用程序(http://localhost/projectfolder)的 '主頁'。但是,當我訪問特定的控制器(http://localhost/projectfolder/admin)時,它不起作用。但是當主機和控制器之間有一個index.php時(http://localhost/projectfolder/index.php/admin),它就可以工作。我正在尋求解決之間的'index.php'。

+1

你不能簡單地刪除index.php作爲引導CodeIgniter應用程序/框架。隨意將它移動到另一個目錄,並指出你的文件根目錄。 – 2013-02-22 16:40:25

+0

這將幫助你: http://stackoverflow.com/questions/15017448/how-can-remove-index-php-from-url/15017916#15017916 – 2013-02-23 05:45:07

回答

0

請確保mod_rewrite已啓用。另外,請嘗試httpd.conf中這樣

<Directory /youdirectory path> 
      Options Indexes FollowSymLinks MultiViews 
      AllowOverride All 
      Order allow,deny 
      allow from all 
</Directory> 

也請檢查CodeIgniter的URL設置here

+0

正如我剛纔提到的,rewrite_module啓用( mod_rewrite的)。我已經嘗試過,但無濟於事。 – 2013-02-23 04:54:47

0

擴展在永聯的評論:

你沒有物理刪除index.php文件。你會得到一個403,因爲目錄列表被拒絕(並且index.php不存在),並且控制器/方法上的一個404會因爲它們不存在而導致url。

把CodeIgniter index.php放回它所屬的地方,你應該沒問題。此行:

$config['index_page'] = ''; 

是「去除」index.php的重要部分。有了這個空白,CodeIgniter的url/uri helper函數將不會在網址中放入index.php

有關更多信息,請參閱my answer正確的base_url

+0

我沒有刪除任何index.php。 CI的引導程序仍然是項目的根源。 – 2013-02-23 04:50:18

+0

另外,$ config ['index_page']爲空。 – 2013-02-23 04:59:21

+0

那麼你可以嘗試評論'RewriteCond $ 1!^(index \ .php | images | robots \ .txt)嗎? – Brendan 2013-02-25 14:27:08

0

如果您使用本地主機,那麼您的$ _SERVER ['DOCUMENT_ROOT']將取決於您的wamp或xampp文件夾。它不會包含您的項目文件夾名稱。

所以如果你的項目文件夾名稱是假設「測試」,那麼你必須寫下你的htaccess如下。

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /test/index.php/$1 [L] 

您必須在最後一行添加「test /」,您不需要在URL中添加index.php。 我希望這會起作用。

0

幾次閱讀你的問題後,它終於有道理了。我相信你需要添加一個像下面這樣的RewriteBase:

RewriteEngine on 
RewriteBase /projectfolder/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L]