没有www到www的URL - 使用mod_rewrite和CodeIgniter

时间:2015-06-26 19:53:09

标签: apache .htaccess mod-rewrite rewrite

我正在维护一个大部分由另一个开发团队开发的网站。我正在开发新功能,但有时我不知道一些旧代码是如何工作的。该网站是使用CodeIgniter开发的,并且有一个包含单个规则的简单.htaccess文件。我不擅长PHP或mod_rewrite,所以我需要你的帮助。

在.htaccess文件中有以下行:

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

我在Google上搜索mod_rewrite,我想上面的代码会检查所请求的内容是不是文件或目录,如果没有,它会重写在域之后插入index.php?/的URL。例如,如果我请求http://www.example.net/teste,它将被重写为http://www.example.net/index.php?/teste。我对吗?我还假设这样做是为了匹配CodeIgniter的URL格式,包括框架中的index.php,对吗?但我认为很奇怪的是,即使在RewriteRule终止执行后,我也无法在URL中看到index.php?/(但没关系,这正是我想要的)。

我现在的问题是,我想将没有www的所有网址重定向到带有www的网址。所以,我试图在.htaccess的最后一行插入这两行:

RewriteCond %{HTTP_HOST} ^example.net
RewriteRule ^ http://www.example.net%{REQUEST_URI} [R=301]

它有效,但现在我可以在URL中看到index.php?/ part。我不希望显示index.php?/ part。

我做错了什么?您是否知道在URL中包含www而不显示index.php?/ part。

的方法

谢谢。

==================

更新答案:

嘿伙计们,

我将.htaccess修改为:

RewriteEngine On
RewriteBase /

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

# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{HTTP_HOST} ^vesteer\.com\.br$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

有效。现在一切都还好。

感谢您的回复。

1 个答案:

答案 0 :(得分:1)

好的找到你的解决方案,只需更新你.htaccess代码

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L]