1

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

5 回答 5

0

试试这个代码添加www

RewriteEngine On

RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI}  [R=301,L,NE]
于 2013-11-30T10:17:04.487 回答
0

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

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

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

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

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

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

重写引擎开启
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ demo/ $1 [R=301,L,NS]

(我还添加了NSflag,因为您可能希望它用于像这样的“化妆品”外部重写。)

于 2013-11-30T14:17:34.083 回答
0

也许这个?

# 强制 www
# 如果你有子域,你可以将它们添加到
# 使用“|”的列表 (OR) 正则表达式运算符
RewriteCond %{HTTP_HOST} !^(www|local|admin) [NC]
重写规则 ^(.*)$ http://www.yourdomainhere.com/ $1 [L,R=301]
于 2013-11-29T20:42:13.293 回答
0
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
于 2013-11-30T10:05:10.033 回答
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 文件夹时,我发现它不能很好地重定向。

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

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

你有什么主意吗?

于 2013-11-30T09:40:57.083 回答