gpt4 book ai didi

php - Codeigniter 路由不正确

转载 作者:可可西里 更新时间:2023-11-01 13:51:43 26 4
gpt4 key购买 nike

我安装了适用于 Windows 的 Apache。我购买了 CodeIgniter Professional 并下载了他们的源代码。它说我应该将其 .htaccess 放在网站的根文件夹中,所以我做到了。我将基本 URL 设置为 http://127.0.0.1/kids/其中 kids 是网站的根文件夹。它显示主页就好了。当我点击一个链接时,它总是给出 404 错误。它说,“在此服务器上找不到请求的 URL/index.php/welcome/cat/2。”我在目录中尝试了 .htaccess 的几种可能性,但没有成功。在 .htaccess 中,它指示:

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

请解释为什么它根本不起作用?我还检查了 configs.php,它似乎也不错。 config['index_page'] 设置为空白。我删除了 .htaccess 文件,但仍然存在同样的问题,只是它说:“在此服务器上找不到请求的 URL/kids/welcome/cat/2。”

试图让它工作已经浪费了很多时间,我正在失去耐心。

这是来自 CodeIgniter Professional 的说明:

“为了让 CodeIgniter 可以访问这些文件夹,您还需要在网站的根文件夹中创建一个小的 .htaccess 文件。这是该 .htaccess 文件的样子。它基本上包含了所有 mvs 某些文件的说明和可在网站上查看的文件夹:

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

如果您熟悉 Apache 中的 mod_rewrite,您会注意到此规则表面上从任何目标的 URL 中删除了 index.php。下面,当您配置 CodeIgniter(尤其是 config.php 文件)时,您会明白为什么这是一个好主意。如果您不熟悉 Apache 中的 mod_rewrite,请不要被这个文件吓到。基本上,.htaccess 文件列出了一些规则,其中之一是从所有 URL 中删除 index.php。文件中的其他规则允许使用您以后需要的各种其他文件夹(例如包含 CSS、JavaScript、验证码文件和图像的文件夹)。”

我按照指示做了...将 htaccess 文件放在根文件夹中,但它给出了 404 错误。如果我从根文件夹中删除 htaccess 文件,它会显示主页。如果我添加 htaccess 文件,它会出现 404 错误。我移动了 htaccess,它没有做任何重新路由的事情。显然,Apache 理解 htaccess,否则它不会显示 404 错误。

最佳答案

您的路线可能没有正确解析,但我不确定。我建议执行以下步骤。

首先,我会放弃使用 PATH_INFO用于您的 CodeIgniter 路由,因为它不是必需的。更改您的 .htaccess文件到此:

RewriteEngine On

RewriteCond $0 !^(index\.php|images|captcha|css|js|robots\.txt)
RewriteRule ^.*$ index.php [L]

然后,在您的配置中,确保 $config['uri_protocol']设置为 AUTO (默认,我相信)或REQUEST_URI .

接下来,最可能的原因是您的路由期望 URL 上有一个尾部斜杠。我对 CodeIgniter 的了解还不够,无法知道该特定设置的配置位置,但您可以使用以下配置指令使您的 URL 具有尾部斜杠:

$config['url_suffix'] = "/";

编辑:确保mod_rewrite也在工作。在您的 .htaccess 顶部试试这个文件,在 RewriteEngine 之后指令:

RewriteRule .* http://stackoverflow.com/ [L,R]

如果您被重定向到 Stack Overflow,至少我们会知道这是有效的。如果不是,则不会出现 500 错误,因此问题出在 .htaccess 上。文件,在这种情况下,您应该确认相应的 <Directory>服务器配置中有关站点在磁盘上的位置的条目有 AllowOverride All设置。

编辑:我应该更了解正斜杠,抱歉。 mod_rewrite 出现问题的原因在您的每个目录 ( .htaccess) 上下文中工作。

一旦您的 URL 被重写,它就会被检查以确定是什么 mod_rewrite应该这样做。当您的 URL 指向本地资源并包含前导斜杠时,mod_rewrite保持原样。如果没有,它会添加每个目录的前缀。

当它保持原样时,内部重定向到 /index.php ,在这种情况下,假定为来自主机 (localhost) 的完全限定 URL。所以,请求的资源最终是 http://localhost/index.php .添加每个目录前缀后,重写引擎中的后续步骤会尝试删除 DocumentRoot从路径,如果它存在。这给我们留下了 /kids/index.php ,然后传递给内部重定向,并按预期解析。

关于php - Codeigniter 路由不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3401911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com