代码之家  ›  专栏  ›  技术社区  ›  netrox

代码点火器的路线不对

  •  5
  • netrox  · 技术社区  · 14 年前

    我安装了Apache for Windows。我买了codeigner专业版并下载了他们的源代码。它说我应该把它的.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,它看起来也不错。配置[索引页面]设置为空白。我删除了.htaccess文件,但仍然存在相同的问题,只是它说,“在此服务器上找不到请求的URL/kids/welcome/cat/2。”

    为了让它工作已经浪费了好几个小时,我失去了耐心。

    以下是CodeIgniter专业人员的说明:

    “要使CodeIgniter可以访问这些文件夹,您还需要在网站的根文件夹中创建一个小的.htaccess文件。以下是.htaccess文件的外观。它基本上包含了在网站上可查看的所有MVS特定文件和文件夹的说明:

    重写引擎打开
    重写秒$1!^(index\.php images captcha css js robots \.txt)
    rewriterule^(.*)$/index.php/$1[l]
    

    如果您熟悉Apache中的mod_rewrite,那么您会注意到这个规则表面上从任何目的地的URL中删除了index.php。下面,当您配置codeigner(尤其是config.php文件)时,您将看到为什么这是一个好主意。如果您不熟悉Apache中的mod_rewrite,请不要对这个文件感到太害怕。基本上,.htaccess文件规定了一些规则,其中之一从所有URL中删除index.php。文件中的其他规则允许使用各种其他文件夹(例如包含css、javascript、captcha文件和图像的文件夹)。”

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

    2 回复  |  直到 14 年前
        1
  •  8
  •   Tim Stone    14 年前

    你的路线可能没有正确解析,但我不确定。我推荐以下步骤。

    首先,我会放弃使用 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上有一个尾随斜杠。我不太了解codeigner,不知道在哪里配置了特定的设置,但是您可以使用下面的配置指令使URL有一个尾随斜杠:

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

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

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

    如果您被重定向到堆栈溢出,至少我们会知道这是有效的。如果没有,则不会出现500个错误,因此问题在于 HTAccess 文件,在这种情况下,您应该确认 <Directory> 您的站点所在磁盘的服务器配置中的条目 AllowOverride All 集合。

    编辑 :我应该更了解斜杠,对不起。问题的发生是因为 MODY重写 按目录工作( HTAccess 语境。

    一旦您的URL被重写,它将被检查以确定 MODY重写 应该这样做。当您的URL指向本地资源并包含一个前导斜杠时, MODY重写 保持原样。否则,它会添加每个目录的前缀。

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

        2
  •  0
  •   Kieran Andrews    14 年前

    试试这个:

    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所在的childs文件夹中。