将非www重定向到www URL,但它不能正常工作?

时间:2013-11-29 20:40:45

标签: .htaccess redirect web no-www

我正在使用更改网址的.htaccess代码(在非www网址中添加'www。')但我的问题是在网址中输入/子文件夹时,.htaccess重定向不会工作正常。

示例

我输入此网址: mydomain.com/demo / 重定向到: www.mydomain.com (不包含/demo
任何想法?

这是我的.htaccess代码:

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

5 个答案:

答案 0 :(得分:0)

也许这个?

# Enforce www
# If you have subdomains, you can add them to
# the list using the "|" (OR) regex operator
RewriteCond %{HTTP_HOST} !^(www|local|admin) [NC]
RewriteRule ^(.*)$ http://www.yourdomainhere.com/$1 [L,R=301]

答案 1 :(得分:0)

我已经更改了代码并将其放在根路径中,它运行良好:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]    
</IfModule>

.htaccess文件应放在/ demo文件夹中,但当我将其位置移动到/ demo文件夹时,我发现它无法正确重定向。

ie:http://mydomain.com/demo/?querystring redirect =&gt; http://www.mydomain.com/?querystring

问题是url中的'demo /'被消除了。

你知道吗?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

尝试使用此代码添加www

RewriteEngine On

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

答案 4 :(得分:0)

您的问题是,如果.htaccess文件放在www根文件夹的子文件夹中,则子文件夹的名称为stripped from the path before it's passed to the rewrite rules

  

“在.htaccess文件中使用重写引擎时,每个目录前缀(对于特定目录始终相同)会自动删除以进行RewriteRule模式匹配并自动< em>在任何相对之后添加(不以斜杠或协议名称开头)替换遇到规则集的结尾。有关将哪些前缀添加回相对替换的更多信息,请参阅RewriteBase指令。“

因此,重写规则中的^(.*)$正则表达式假定以匹配整个路径并将其保存在$1中,实际上只匹配部分在 demo/前缀后路径

要解决此问题,您有两种选择:

  • a)将.htaccess文件(或至少此特定重写规则)移至www根文件夹。如果由于某种原因,您仍希望它仅匹配“demo”文件夹下的路径,请将^(.*)$正则表达式替换为例如^(demo(/.*)?)$

  • b)自己添加文件夹名称,使重写规则如下所示:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/demo/$1 [R=301,L,NS]

(我还添加了NS flag,因为你可能想要这样的“外观”外部重写。)