Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter isn';t路由权_Php_Url_Codeigniter_Routing - Fatal编程技术网

Php Codeigniter isn';t路由权

Php Codeigniter isn';t路由权,php,url,codeigniter,routing,Php,Url,Codeigniter,Routing,我安装了Apache for Windows。我买了CodeIgniter Professional并下载了他们的源代码。它说我应该把它的.htaccess放在网站的根文件夹中,所以我就这样做了。我将基本URL设置为kids是网站根文件夹的位置。它显示的主页很好。当我点击一个链接时,它总是给出404错误。它说,“在此服务器上找不到请求的URL/index.php/welcome/cat/2。”我在目录中尝试了几种可能的.htaccess,但没有成功。在.htaccess中,它指示: Rewri

我安装了Apache for Windows。我买了CodeIgniter Professional并下载了他们的源代码。它说我应该把它的.htaccess放在网站的根文件夹中,所以我就这样做了。我将基本URL设置为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,它看起来也不错。配置['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,您会注意到,在配置CodeIgniter(尤其是config.php文件)时,此规则表面上会从任何目的地的URL中删除index.php,您将了解这是一个好主意的原因。如果您不熟悉Apache中的mod_rewrite,请不要被此文件吓倒。基本上,.htaccess文件规定了一些规则,其中一个规则从所有URL中删除index.php。文件中的其他规则允许使用您需要继续使用的其他各种文件夹(例如包含CSS、JavaScript、验证码文件和图像的文件夹)。”

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

试试这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*)$ /index.php/$1 [NC,L]

把它放在index.php所在的kids文件夹中。

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

首先,我不想在CodeIgniter路由中使用
PATH\u INFO
,因为这是不必要的。请将
.htaccess
文件更改为:

RewriteEngine On

RewriteCond $0 !^(index\.php|images|captcha|css|js|robots\.txt)
RewriteRule ^.*$ index.php [L]
然后,在您的配置中,确保
$config['uri\u protocol']
设置为
AUTO
(我相信是默认设置)或
REQUEST\u uri

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

$config['url_suffix'] = "/";
RewriteRule .* http://stackoverflow.com/ [L,R]
编辑:确保
mod_rewrite
也正常工作。在
.htaccess
文件顶部,在
RewriteEngine
指令后尝试此操作:

$config['url_suffix'] = "/";
RewriteRule .* http://stackoverflow.com/ [L,R]
如果您被重定向到堆栈溢出,至少我们会知道它正在工作。如果没有,您不会收到500错误,因此问题将在于
.htaccess
文件,在这种情况下,您应该确认您的站点所在磁盘的服务器配置中相应的
条目已满骑乘全部设置

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

重写URL后,将对其进行检查,以确定
mod_rewrite
应如何处理。当URL指向本地资源并包含前导斜杠时,
mod_rewrite
将其保留原样。否则,将添加每个目录前缀


当它保持原样时,在本例中,对
/index.php
的内部重定向被假定为来自主机(localhost)的完全限定URL。因此,请求的资源最终为
http://localhost/index.php
。当添加每个目录前缀时,重写引擎中的后续步骤将尝试从路径中删除
DocumentRoot
,如果它存在的话。这将给我们留下
/kids/index.php
,然后将其传递到内部重定向,并进行解析ved与预期的一样。

也不起作用。:(我将其放在根文件夹中,单击带有URL的链接后,我收到一条错误消息,“在此服务器上找不到请求的URL/index.php/welcome/cart/3”在FF上。也不起作用。这也导致主页显示404错误。按照您的指示做了……仍然没有任何结果。@netrox-Hmm。很有趣。请查看我的编辑,希望我们可以从那里开始工作。蒂姆,感谢调试提示。我添加了行以重新路由到stackoverflow,它确实重定向了,没有问题。(良好的调试提示!)显然apache理解htaccess文件。@netrox啊,至少这很好。是
$config['index\u page']
config.php
文件中设置为空?另外,从
.htaccess
文件中的
/index.php
中删除初始斜杠。最后删除初始斜杠解决了问题!!!!谢谢你,蒂姆!!!!你这个人!对我来说毫无意义,但至少它是有效的!我还将向Worx报告这个奇怪的事情。