2010-08-04 97 views
5

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

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的专业指导:

“为了使这些文件夹访问笨,你还需要建立在你的网站的根文件夹一个小的.htaccess文件下面是什么.htaccess文件看起来像它基本上包含allmvs某些文件和文件夹要在网站上查看说明:

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

如果您熟悉Apache中的mod_rewrite,你会注意到,这条规则显然是从消除的index.php任何目标的URL。下面当你配置CodeIgniter(和partic ularly config.php文件),你会明白为什么这是一个好主意。如果你不熟悉Apache中的mod_rewrite,不要被这个文件吓倒。基本上,.htaccess文件提出了一些规则,其中一个从所有URL中删除index.php。文件中的其他规则允许使用您将需要前进的各种其他文件夹(例如包含CSS,JavaScript,验证码文件和图像的文件夹)。“

我按照指示进行操作......将如果我从根文件夹中删除htaccess文件,它会显示主页。如果我添加htaccess文件,它会给出404错误。我移动了htaccess并且它没有做任何事情。 。-route显然,阿帕奇理解的htaccess否则将不显示404错误

回答

8

您的路线可能无法正确解析,但我不确定。我会推荐以下步骤。

首先,我将废除为您的CodeIgniter路由使用PATH_INFO,因为这不是必需的。您.htaccess文件改成这样:

RewriteEngine On 

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

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

接下来,最有可能的原因是您的路线预计在URL上会出现尾部斜线。我不知道有足够的了解笨知道在哪里特定的设置配置,但可能会导致您的网址都必须具有以下配置指令结尾的斜线:

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

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

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

如果您重定向到堆栈溢出,至少我们会知道的工作。如果没有,您没有收到500错误,所以问题在于.htaccess文件,在这种情况下,您应该确认您的服务器配置中相应的<Directory>条目对于您的站点位于磁盘上的位置已设置AllowOverride All

编辑:我应该更好地了解正斜杠,对此深表歉意。出现此问题的原因是mod_rewrite在每个目录(.htaccess)上下文中的工作方式。

一旦您的URL被重写,它将被检查以确定mod_rewrite应该如何处理它。当您的网址指向本地资源并包含前导斜杠时,mod_rewrite将保持原样。如果没有,则会添加每个目录的前缀。

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

+0

无法正常工作。它也导致主页显示404错误。没有你的指示...仍然没有。 – netrox 2010-08-04 04:02:08

+0

@netrox嗯..有趣。看我的编辑,并希望我们可以从那里工作。 – 2010-08-04 04:13:20

+0

蒂姆,感谢调试提示..我补充说这条线重新路由到stackoverflow,它没有问题重定向。(很好的调试技巧!)明显的apache理解htaccess文件。 – netrox 2010-08-04 04:18:30

0

试试这个:

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] 

在T将这个他的孩子文件夹在index.php所在的位置。

+0

也不起作用。 :(我把它放在根文件夹中,然后点击一个URL链接,我得到错误,说:“请求的URL /index.php/welcome/cart/3在该服务器上找不到”在FF。 – netrox 2010-08-04 02:22:17