从 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