从 URL 中删除 index.php - Codeigniter 2

Posted

技术标签:

【中文标题】从 URL 中删除 index.php - Codeigniter 2【英文标题】:Remove index.php From URL - Codeigniter 2 【发布时间】:2011-07-06 12:50:06 【问题描述】:

我无法从 Codeigniter 中的 URL 中删除 index.php。我用 Codeigniter 1.7 制作了一些网站,而我使用的 .htaccess 代码在 2 中不起作用。

我尝试过使用

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %REQUEST_URI ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %REQUEST_URI ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt|css)
RewriteRule ^(.*)$ ./index.php/$1 [L]

</IfModule>

我也试过没有 RewriteBase / in。

我已将 $config['uri_protocol'] 更改为 REQUEST_URI 和 QUERY_STRING,什么都没有。

我已经设置了 $config['index_page'] = "";

文件结构是192.168.0.130/(site)/,所以肯定是回到服务器根目录,找不到index.php文件。

我制作的所有控制器都可以通过输入 192.168.0.130/(site)/index.php/testcontroller 来访问

谢谢。

抱歉,如果之前有人问过这个问题 - 我已经查看并尝试了我能看到的内容。

编辑:

我还应该补充一点,我将默认文件夹更改为

应用

CI-2.0

index.php

并将 index.php 中的路径更改为正确。

【问题讨论】:

你的父文件夹中有htaccess文件吗? 有一个htaccess文件。它只有一行,用于不同的项目 - 我只是尝试将其注释掉,但它没有做任何事情。 顺便说一句:系统和应用程序 RewriteConds 必须以 /SUBFOLDER/ 开头 我尝试添加子文件夹,但仍然没有。我还编辑了帖子说我将系统的默认文件夹名称更改为 CI-2.0。 192.168.0.130/(site) 是(站点)root/包含您的 index.php?否则,您需要将目录添加到Rewrite Base 【参考方案1】:

尝试您发布的第一个代码块,而不是 /index.php 尝试使用 /(site)/index.php(obv 将 (site) 替换为您的站点文件夹名称)。

【讨论】:

我刚试了一下,还是不行。这将是我错过的一些愚蠢的事情......谢谢你的帮助。 我刚把它移到我的本地服务器上,它可以与这些 .htaccess 设置一起使用,所以它一定是服务器问题。 这听起来像是一个愚蠢的问题,但您最初测试的服务器是否启用了 mod_rewrite? 我刚刚发现为什么这不适用于我的本地 EasyPHP 设置...如果您为您的网站使用别名,则需要将“RewriteBase /”更改为“RewriteBase /alias”。 伙计们照顾“RewriteBase”!放入 CodeIgniter 所在的子文件夹。【参考方案2】:

这对我有用:

    创建您的 htaccess 文件 将 $config['index_page'] 设置为空 (config.php) 字符串设置 $config['uri_protocol'] = 'REQUEST_URI'; (config.php)

这是我的 htaccess 文件:

Options -Indexes
Options +FollowSymLinks

RewriteEngine On
RewriteBase /

#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,

RewriteCond %REQUEST_URI ^system.*
RewriteRule ^(.*)$ index.php?/$1 [L]

#When your application folder isn't in the system folder

RewriteCond %REQUEST_URI ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin   

ErrorDocument 404 /index.php

来源:

http://taggedzi.com/articles/display/codeigniter-2-htaccess-and-friendly-urls

【讨论】:

谢谢。实际上,我确实让它在本地服务器和生产服务器上的相同配置下正常工作,所以它一定是我们拥有的开发服务器有问题。 对不起,我尝试了每个 htaccess 代码,我在 Google 上挖了 5 天,尝试了每个 htaccess 代码示例,但每个都失败了。但是,在 .htaccess 代码中添加 'RewriteBase /my/base/site/url' 后,这段代码终于为我工作了。在添加上述行之前,当我尝试调用我的 CI 控制器时,它被重定向到 localhost wamp 页面上。所以,我将上面的代码添加为 'RewriteBase' //config.php $config['base_url'] = ''; $config['index_page'] = ''; $config['uri_protocol'] = 'REQUEST_URI';嘿嘿.. :) 酷!!!!罗宾摩根和非常感谢你.. :)【参考方案3】:
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f

RewriteCond %REQUEST_FILENAME !-d

RewriteRule ^(.*)$ index.php?/$1 [L]

只有在根文件夹中才需要这个添加到.htaccess

【讨论】:

这是唯一一个在我的本地(wamp 上的 xamp)和托管服务器(lamp)上都有效的 htaccess【参考方案4】:

在遵循其他人和 CodeIgnitor URL documnetation 的所有指示后,不要忘记重新启动服务器。我只是忘了这样做,并继续尝试所有其他解决方案。

【讨论】:

注意:有些网络主机在更新 .htaccess 文件后不需要您重新启动服务器。例如,hostgator.com 不需要重新启动:support.hostgator.com/articles/specialized-help/technical/…【参考方案5】:

我在这 2 天.. 尽了一切可能。我刚刚发现您需要以下内容:

类型:

sudo nano /etc/apache2/sites-available/default

并将 AllowOverride None 更改为 AllowOverride All - 这将允许访问您的 .htaccess 文件

<Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
            # Uncomment this directive is you want to see apache2's
            # default start page (in /apache2-default) when you go to /
            #RedirectMatch ^/$ /apache2-default/
</Directory>

并且还可以在 Apache 上启用 mod 重写:

http://***.com/questions/3131236/how-do-you-enable-mod-rewrite

希望这会有所帮助, 马里奥

【讨论】:

【参考方案6】:

您只需在 .htacess 中添加以下代码。

RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L]

【讨论】:

【参考方案7】:

1) 在您的根文件夹中创建 .htaccess 文件

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

2) 编辑Application文件夹中的application/config/config.php文件

$config['base_url'] = 'http://localhost/projectName';

 $config['index_page'] = '';         // remove index.php 

希望对你有用

【讨论】:

以上是关于从 URL 中删除 index.php - Codeigniter 2的主要内容,如果未能解决你的问题,请参考以下文章

无法从 codeigniter 中的 URL 中删除“Index.php”

如何从主页中删除 index.php 并从其他 php 文件中删除 .php 扩展名

从 codeigniter URL 中删除 index.php

从 URL 中删除 index.php - Codeigniter 2

从 Windows 中的 CodeIgniter URL 中删除 index.php

Codeigniter 3.1.6 - 如何从 url 中删除 index.php