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