如何在重定向301 - Codeigniter时从htaccess中删除index.php

时间:2016-03-16 19:39:29

标签: apache .htaccess codeigniter redirect codeigniter-3

当网址类型为:

时,我在Codeigniter中遇到问题
example.gov.ar/news (without www and .gov)

我需要它重定向到:

www.example.gob.ar/news (with www and .gob)

但它重定向

www.example.gob.ar/index.php/news

这是我的htaccess文件:

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

#non-www to www
RewriteCond %{HTTP_HOST} !^www\.(.*)
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

#.gov.ar to .gob.ar
RewriteCond %{http_host} ^example.gov.ar$ [OR]
RewriteCond %{http_host} ^www.example.gov.ar$ 
RewriteRule ^(.*)$ http://www.example.gob.ar/$1 [R=301,L]

注意:我的配置文件有$ config [' index_page'] ='&#39 ;;

提前致谢。

1 个答案:

答案 0 :(得分:2)

尝试切换规则的顺序。

RewriteEngine on

#non-www to www
RewriteCond %{HTTP_HOST} !^www\.(.*)
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

#.gov.ar to .gob.ar
RewriteCond %{http_host} ^example.gov.ar$ [OR]
RewriteCond %{http_host} ^www.example.gov.ar$ 
RewriteRule ^(.*)$ http://www.example.gob.ar/$1 [R=301,L]

# Redirect to index.php internally
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

根据所有规则重新评估.htaccess触发的外部重定向,因此顺序非常重要。

在更改的顺序中,外部重定向首先发生,因此只有最终的URL与第三个RewriteRule匹配,然后在外部不可见。