我正在使用更改网址的.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]
答案 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,因为你可能想要这样的“外观”外部重写。)