将非 www 重定向到 www 网址,但它不能很好地工作?



我正在使用.htaccess代码来更改url(在非www url中添加"www."),但我的问题是在url中输入/子文件夹时,.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]

也许是这样?

#强制www#如果你有子域,你可以将它们添加到#使用"|"(OR)regex运算符的列表重写结束%{HTTP_HOST}^(www|local|admin)[NC]重写规则^(.*)$http://www.yourdomainhere.com/1美元[L,R=301]

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

<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文件夹时,我发现它不能很好地重定向。

即:http://mydomain.com/demo/?querystring重定向=>http://www.mydomain.com/?querystring

问题是url中的"demo/"被删除了。

你知道吗?

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

尝试此代码添加www:

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

您的问题是,如果.htaccess文件被放在www根文件夹的子文件夹中,那么在将其传递给重写规则之前,子文件夹的名称将从路径中删除:

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

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

要解决此问题,您有两个选项:

  • a) 将.htaccess文件(或者至少这个特定的重写规则)移动到www根文件夹。如果出于某种原因,仍然希望它只匹配"demo"文件夹下的路径,请将^(.*)$ regex替换为例如^(demo(/.*)?)$

  • b) 将文件夹名称添加回您自己,使您的重写规则看起来像这样:

重写引擎打开重写结束%{HTTP_HOST}^www。[NC]重写规则^(.*)$http://www.%{HTTP_HOST}/演示/$1[R=301,L,NS]

(我还添加了NS标志,因为您可能希望它用于像这样的"修饰性"外部重写。)

相关内容

最新更新