【问题标题】:403 forbidden with URI routing in CodeigniterCodeigniter 中的 URI 路由禁止 403
【发布时间】:2012-01-05 10:07:37
【问题描述】:

我正在尝试使用 Codeigniter 设置到我网站上某个页面的路由,但我只收到 403。我不明白为什么。

路由配置文件中的代码是:

$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 路由完全相同。

它指向的控制器叫做photopage,里面的函数叫做index。

如果我访问 mysite.com/photos/index,它可以工作...

非常感谢任何帮助:)

编辑:

将路由配置文件更改为以下内容,但当我转到 mysite.com/photos 时它仍然无法正常工作。我将控制器功能更改为“视图”而不是“索引”,但它仍然无法工作:(

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

主页和照片/$id 仍然可以正常工作。

【问题讨论】:

  • 默认情况下,如果在没有函数的情况下调用控制器,它将自动运行索引函数。还有为什么你有两条照片路线?
  • 因为一个是 mysite.com/photos 的路由,它显示一个充满缩略图的页面,另一个是 mysite.com/photo/$id,它在用户点击一个特定的照片页面时显示缩略图。
  • 我认为您可能会混淆 CI。第二组规则有 $route['photos'] 指向不同的控制器,它应该如何知道选择哪个?
  • 即使 $route['photos'] 有 1 条路线,它仍然无法工作。仍然出现 403 错误。

标签: codeigniter


【解决方案1】:

您的rewrite 规则应该是:

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

您必须从您的 /application/config/config.php 中删除您的 index.php 条目

验证是否设置正确 403 禁止 错误可能是由于错误的.htaccess 重写。

【讨论】:

  • 这几乎可以工作。不过,我必须在第 3 行的 index.php 之前删除 \,因为我的网站存储在我的主域的子目录中用于开发目的,并且它只是开始加载上面的目录...路由现在可以工作但没有图像或 CSS 已加载...
  • 好的,我知道了!有两个问题:1)我忘记将 css 目录添加到重写的第二行。 2)我有一个名为“照片”的文件夹,其中存储了页面上使用的大量照片(我现在已重命名),我猜它与路由冲突。谢谢雅库布!
  • 在我的情况下,它是与导致此问题的路由名称相同的目录。删除(不需要的)目录解决了问题。
【解决方案2】:

好的,让我们一一看一下(假设您的域是“example.com”并且您通过“.htaccess”隐藏了“index.php”):

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

这将抓取任何这样的 url:http://example.com/photo/36 并将其路由到 /application/controllers/viewphoto 控制器,并调用 view 方法并将其作为参数传递 36。


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

这将抓取任何这样的 url:http://example.com/photo 并将其路由到 /application/controllers/photo 控制器,然后调用不带参数的 index 方法。


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

这将抓取任何这样的 url:http://example.com/photos 并将其路由到 /application/controllers/photospage 控制器,然后调用不带参数的 index 方法。


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

这将抓取像这样的任何 url:http://example.com/photos 并将其路由到 /application/controllers/photos 控制器,然后调用不带参数的 index 方法。 这条路线永远不会被调用,因为它重复了它之前的路线


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

这将抓取到目前为止尚未捕获的任何 url 并将其路由到 /application/controllers/homepage 控制器,并调用不带参数的 index 方法。


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

这将抓取任何这样的 url:http://example.com/homepage 并将其路由到 /application/controllers/homepage 控制器,然后调用不带参数的 index 方法。

我的猜测是这与控制器中没有 index 方法有关。如果不是这样,那么我们需要查看.htaccess 文件的内容。

【讨论】:

  • 我认为它与索引功能无关。我将它更改为视图功能,它仍然无法正常工作。它应该工作,但我不明白为什么它不工作。这是我的 .htaccess 文件的内容(我已经修改以隐藏 index.php):RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ index.php?/$1 [L]
  • 我已经用更新的路由配置文件更新了我的问题。仍然得到相同的 403 错误!
  • 那么也许是你的photos 控制器。那看起来像什么?
【解决方案3】:

如果您的目录名称与引发 403 错误的路径相同,则可能会出现此问题。删除或重命名目录,路由就会生效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 2014-12-06
    相关资源
    最近更新 更多