codeigniter
2012-01-05 31 views 3 likes 
3

我試圖設置路由到我的網站與Codeigniter的頁面,但我只是得到了403。我無法理解爲什麼。在路由配置文件403在Codeigniter中禁止使用URI路由

代碼是:

$route['photo/(:num)'] = "viewphoto/view/$1"; 
$route['photo'] = 'photo'; 

$route['photos'] = "photospage/index"; 
$route['photos'] = 'photos'; 

$route['default_controller'] = 'homepage'; 
$route['homepage'] = 'homepage'; 

當去mysite.com/photo/2(例如)它工作正常,一樣的主頁。但是當去mysite.com/photos時,我得到一個403 Forbidden錯誤信息。

我不能解決它,路由設置與mysite.com/photo/2路由完全相同。

它指向的控制器被稱爲photospage,其中的函數被稱爲索引。

如果我去mysite.com/photos/index它的工作原理,但...

任何幫助最讚賞:)

編輯:

更改配置文件路徑以下,但它仍然無法正常工作時,我去mysite.com/photos。我改變了控制器功能的「視圖」而不是「指數」,但它仍然不會工作:(

$route['photos'] = "photos/view"; 
$route['photo/(:num)'] = "viewphoto/view/$1"; 
$route['default_controller'] = 'homepage'; 

網頁和照片/ $ ID仍然正常工作,但。

+0

默認情況下,如果沒有函數調用控制器,它將自動運行索引函數。另外爲什麼你有兩條路線照片? – Rooneyl 2012-01-05 11:22:41

+0

Becuase one是mysite.com/photos的一個路徑,它顯示了一個充滿縮略圖的頁面,另一個是mysite.com/photo/$id,它顯示了當用戶點擊縮略圖時的特定照片頁面。 – 2012-01-05 11:29:51

+0

我想你可能會混淆CI。第二組規則有$ route ['photos']指向不同的控制器,它應該如何知道應該選擇哪一個? – Rooneyl 2012-01-05 11:37:01

回答

3

rewrite規則應該是:

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

你必須從你的/application/config/config.php

刪除您index.php項驗證是否設置正確的403禁止錯誤可能是由於錯誤的.htaccess重寫。

+0

這幾乎成功。但是我必須在第三行的index.php之前刪除\,因爲我的網站存儲在我的主域的子目錄中用於開發目的,並且它剛剛開始加載上面的目錄...路由現在可以工作,但沒有圖像或CSS加載... – 2012-01-05 16:40:12

+1

好吧,我已經想通了!有兩個問題:1)我忘了將css目錄添加到重寫的第2行。 2)我有一個名爲'照片'的文件夾,用於存儲頁面上使用的大量照片(我現在已經重命名),我猜它與路由衝突。謝謝Jakub! – 2012-01-05 17:16:46

+1

在我的情況下,它是名稱與導致此問題的路由名稱相同的目錄。刪除(不需要的)目錄解決了這個問題。 – 2014-09-22 06:51:33

2

OK,讓我們一起來看看這些一個接一個(假設您的域名是「example.com」,你有「的index.php」經由」的.htaccess'隱藏):

$route['photo/(:num)'] = "viewphoto/view/$1"; 

這會抓住任何像這樣的網址:http://example.com/photo/36和將其路由到/application/controllers/viewphoto控制器,並調用view方法並將其作爲36傳遞給參數。


$route['photo'] = 'photo'; 

這會抓住任何像這樣的網址:http://example.com/photo並路線/application/controllers/photo控制器,並調用index方法不帶參數。


$route['photos'] = "photospage/index"; 

這會抓住任何像這樣的網址:http://example.com/photos並路線/application/controllers/photospage控制器,並調用index方法不帶參數。


$route['photos'] = 'photos'; 

這會抓住任何像這樣的網址:http://example.com/photos並路線/application/controllers/photos控制器,並調用index方法不帶參數。 這條路線將永遠不會被調用,因爲它複製權前一個它


$route['default_controller'] = 'homepage'; 

這會搶尚未迄今捕獲和路由到/application/controllers/homepage控制器的任何URL和呼叫不帶參數的index方法。


$route['homepage'] = 'homepage'; 

這會抓住任何像這樣的網址:http://example.com/homepage並路線/application/controllers/homepage控制器,並調用index方法不帶參數。

我的猜測是這與控制器中沒有index方法有關。如果情況並非如此,那麼我們需要查看.htaccess文件的內容。

+0

我不認爲它與索引函數有什麼關係。我將其更改爲查看功能,但仍然無效。它應該工作,但我不明白爲什麼它沒有。這裏是我的.htaccess文件的內容(我已修改爲隱藏index.php):'RewriteEngine on RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteCond%{REQUEST_FILENAME}! - l RewriteRule ^(。*)$ index.php?/ $ 1 [L]' – 2012-01-05 16:17:35

+0

我更新了我的問題,更新了路由配置文件。仍然得到相同的403錯誤! – 2012-01-05 16:20:05

+0

然後,也許這是你的'照片'控制器。這是什麼樣子? – swatkins 2012-01-05 16:35:44

0

如果您有一個名稱與引發403錯誤的路由名稱相同的目錄,則會發生此問題。刪除或重命名目錄,路線將起作用。

相關問題