2009-11-06 114 views
9

我运行笨平台,它使用的.htaccess接受像的.htaccess重定向非www到www保留URI字符串

http://www.mysite.com/controller/function/argument 

网址,我目前使用的一些重写的​​.htaccess,即(简体):

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^(/index\.php|/images|/assets) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

我想添加一个重写规则,将所有非www请求重定向到www。我还希望域名后面的URI字符串在重定向中保持不变。例如,如果用户请求http://mysite.com/controller/function/argument,我希望.htaccess文件在浏览器中将请求重写为http://www.mysite.com/controller/function/argument,然后处理该请求。

回答

10

应该是这样的:

RewriteCond %{HTTP_HOST} . 
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] 
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 
+0

这不会干扰我的第二个RewriteRule吧?我了解你的RewriteCond,我不想适用于我已有的规则。 – 2009-11-06 08:14:04

+0

如果您将我的地址添加为第一个地址,则只有在主机不是www.mysite.com时才会激活它。如果它被激活,将会有一个重定向的HTTP,第二个HTTP查询将激活你自己的重写,如果条件符合 – rossoft 2009-11-06 08:36:58

+0

在这里查看更多信息: http://www.webconfs.com/how-to-redirect- a-webpage.php – rossoft 2009-11-06 08:39:07

14

我也有类似的问题,而这个的.htaccess对我的作品

RewriteEngine On       

#This bit rewrites your host name to include www 
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,NC,L] 

#This bit does the codeigniter magic 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 
+0

它正在工作。如果我想添加除blog.example.com之外的规则未被重定向到www? – Permana 2013-07-08 07:16:46

+0

尝试'RewriteCond%{HTTP_HOST}!^(www | blog)\。example \ .com [NC]' – ekhaled 2013-08-23 11:42:45

0

如果你是在Apache 2.4,你可以使用下面的简单重定向:

<if "%{HTTP_HOST} =='example.com'"> 
Redirect/http://www.example.com/ 
</if>