403在Codeigniter中禁止使用URI路由

问题描述:

我试图设置路由到我的网站与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

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

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

如果您有一个名称与引发403错误的路由名称相同的目录,则会发生此问题。删除或重命名目录,路线将起作用。