【问题标题】:htaccess issues in CodeIgniterCodeIgniter 中的 htaccess 问题
【发布时间】:2013-02-22 16:05:15
【问题描述】:

如何删除 index.php 以便利用 CI 的 URL 技巧?当我删除“index.php”时,它会出现 404 错误或 403,即使控制器上存在必要的类。

这是我目前在根目录上的 .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

config.php 上的其他 CI 规范:

$config['index_page'] = '';

$config['uri_protocol'] = 'AUTO';

rewrite_module 已启用。

在 httpd.conf 上:

<Directory />
Options FollowSymLinks
AllowOverride None
Order Allow,Deny
Allow from all
</Directory>

编辑:明确地说,我可以访问我的应用程序的“主页”(http://localhost/projectfolder)。但是,当我访问特定控制器 (http://localhost/projectfolder/admin) 时,它将无法工作。但是当 index.php 在主机和控制器之间时(http://localhost/projectfolder/index.php/admin),它可以工作。我正在寻找解决中间的“index.php”。

【问题讨论】:

  • 您不能简单地删除 index.php,因为它会引导 CodeIgniter 应用程序/框架。随意将其移动到另一个目录并将您的 docroot 指向那里。
  • 这将对您有所帮助:stackoverflow.com/questions/15017448/…

标签: .htaccess codeigniter


【解决方案1】:

请确保 mod_rewrite 已启用。也请像这样尝试httpd.conf

<Directory /youdirectory path>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
</Directory>

请同时检查 CodeIgniter URL 设置here

【讨论】:

  • 正如我所提到的,rewrite_module 已启用 (mod_rewrite)。我试过了,但没有用。
【解决方案2】:

扩展永联的评论:

您不会实际删除 index.php 文件。你得到一个 403 因为目录列表被拒绝(并且 index.php 不存在),并且控制器/方法 url 上的一个 404 因为它们实际上不存在。

将 CodeIgniter index.php 放回它所属的位置,你应该没问题。这一行:

$config['index_page'] = '';

是“删除”index.php 的重要部分。有了这个空白,CodeIgniter 的 url/uri 辅助函数将不会在 url 中放入 index.php

有关更多信息,请参阅正确的 base_url 上的 my answer

【讨论】:

  • 我没有删除任何 index.php。 CI 的引导加载程序仍在项目的根目录上。
  • 另外,$config['index_page'] 是空白的。
  • 那你能不能把RewriteCond $1 !^(index\.php|images|robots\.txt)注释掉?
【解决方案3】:

如果您使用的是 localhost,那么您的 $_SERVER['DOCUMENT_ROOT'] 将取决于您的 wamp 或 xampp 文件夹。它不会包含您的项目文件夹名称。

因此,如果您的项目文件夹名称为“test”,那么您必须如下编写 htaccess。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /test/index.php/$1 [L]

您必须在最后一行添加“test/”,并且您不需要在 URL 中添加 index.php。 我希望这会奏效。

【讨论】:

    【解决方案4】:

    看了几遍你的问题,终于明白了。我相信你需要像下面这样添加一个 RewriteBase:

    RewriteEngine on
    RewriteBase /projectfolder/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond $1 !^(index\.php|images|robots\.txt)
    RewriteRule ^(.*)$ /index.php/$1 [L]
    

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多