从Codeigniter中删除'index.php'后需要域后的额外斜杠

时间:2012-09-02 13:59:21

标签: php codeigniter mod-rewrite url-rewriting

我一直在尝试使用mod-rewrite从我的Codeigniter网站中删除'index.php'。但是我最终遇到了这个问题:

原始URI: http://mysite.com/index.php/about

在删除index.php后,只有这样才能使其工作http://mysite.com//about(注意额外的斜线)

删除额外的斜杠会导致Codeigniter在域之后“看不到”url字符串。

我现在尝试了3种不同的mod-rewrite方法,但最终都遇到了同样的问题 - 除非你在域名之后添加一个额外的斜杠,否则URI不起作用。

我当前的mod_rewrite代码:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{THE_REQUEST} !/system/.*
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]

RewriteCond $1 !\.(css|js|gif|jpe?g|png) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{HTTP_HOST} ^www.domain.co
RewriteRule (.*) http://domainname.co/$1 [R=301,L]

</IfModule>

2 个答案:

答案 0 :(得分:0)

首先:请发布您正在使用的mod_rewrite代码,以确保其正确无误。

第二:检查你的应用程序配置文件,你的索引页面是否设置为$config['index_page'] = '';

答案 1 :(得分:0)

问题的解决方案非常简单。

像这样编辑.htaccess -

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /<directory_where_your_code_is_kept>/

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{THE_REQUEST} !/system/.*
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]

RewriteCond $1 !\.(css|js|gif|jpe?g|png) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{HTTP_HOST} ^www.domain.co
RewriteRule (.*) http://domainname.co/$1 [R=301,L]

</IfModule>

然后转到config.php并进行这些更改 -

$config['base_url'] = 'http://localhost/<directory_where_your_code_is_kept>';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';