Mod rewrite 将www重定向到非www是重定向到脚本,而不是漂亮的URL

Mod rewrite 将www重定向到非www是重定向到脚本,而不是漂亮的URL,mod-rewrite,Mod Rewrite,My domaindomain.com被重定向到www.domain.com,但由于内部重定向,它仅在某些情况下有效: domain.com/folder/应该重定向到www.domain.com/folder/但是它被重定向到www.domain.com/blog/index.php 这里的问题是,在内部,www.domain.com/folder/通过重写规则使用blog/index.php: RewriteRule ^$ ../blog/index.php 我不知道

My domaindomain.com被重定向到www.domain.com,但由于内部重定向,它仅在某些情况下有效:

  • domain.com/folder/应该重定向到www.domain.com/folder/但是它被重定向到www.domain.com/blog/index.php
这里的问题是,在内部,www.domain.com/folder/通过重写规则使用blog/index.php

RewriteRule ^$          ../blog/index.php
我不知道为什么,但是你被重定向到脚本而不是漂亮的URL

它在这里工作(当所有代码位于同一“目录”条目中时,从domain.com/folder/重定向到www.domain.com/folder):


选项-所有+FollowSymLinks
重新启动发动机
#将非www重定向到www
重写cond%{HTTP_HOST}^domain\.com
重写规则^(.*)$http://www.domain.com/$1[R=301,L]
重写规则^folder/$../blog/index.php
此处不起作用(当使用2个“目录”条目时,从domain.com/folder/重定向到www.domain.com/blog/index.php):


选项-所有+FollowSymLinks
重新启动发动机
#将非www重定向到www
重写cond%{HTTP_HOST}^domain\.com
重写规则^(.*)$http://www.domain.com/$1[R=301,L]
重新启动发动机
重写规则^$../blog/index.php
在两个目录中使用选项+FollowSymLinks+symlinksFownerMatch进行测试,但没有运气:(

我在这里看到了一个使用VirtualHosts而不是Directory的解决方案: 但我认为这应该是一种方法,因为这种问题不仅与“非www到www”有关,还与任何重定向有关。


<Directory /var/www/vhosts/domain.com/httpdocs/>
    Options -All +FollowSymLinks
    RewriteEngine on

    # redirect non-www to www
    RewriteCond %{HTTP_HOST}        ^domain\.com
    RewriteRule ^(.*)$          http://www.domain.com/$1 [R=301,L]                      
</Directory>
<Directory /var/www/vhosts/sonidon.com/httpdocs/folder/>
    RewriteEngine on
    RewriteRule ^$          ../blog/index.php
    #ADDED LINE BELOW
    RewriteRule ^/$          ../blog/index.php
</Directory>
选项-所有+FollowSymLinks 重新启动发动机 #将非www重定向到www 重写cond%{HTTP_HOST}^domain\.com 重写规则^(.*)$http://www.domain.com/$1[R=301,L] 重新启动发动机 重写规则^$../blog/index.php #在下面添加了一行 重写规则^/$../blog/index.php

试试我在上面加的那句话,我想问题是“http://domain.com“正在被重定向到”http://www.domain.com/(注意后面的斜杠)。如果没有uri^$,那么您在第二个组中重定向,但实际上uri是“/”.

感谢您的帮助,但这并不能解决问题。我在另一次重写的上面和上面都尝试了这一行,但没有效果。我还尝试了为这两个重定向规则中的每一个使用不同的目标脚本,以及“RedirectRule^$”这个问题最令人惊讶的是,我一直在StackOverflow和Google中寻找更深入的信息,但没有发现任何人有同样的问题。非常感谢您的努力!
<Directory /var/www/vhosts/domain.com/httpdocs/>
    Options -All +FollowSymLinks
    RewriteEngine on

    # redirect non-www to www
    RewriteCond %{HTTP_HOST}        ^domain\.com
    RewriteRule ^(.*)$          http://www.domain.com/$1 [R=301,L]                      
</Directory>
<Directory /var/www/vhosts/sonidon.com/httpdocs/folder/>
    RewriteEngine on
    RewriteRule ^$          ../blog/index.php
</Directory>
<Directory /var/www/vhosts/domain.com/httpdocs/>
    Options -All +FollowSymLinks
    RewriteEngine on

    # redirect non-www to www
    RewriteCond %{HTTP_HOST}        ^domain\.com
    RewriteRule ^(.*)$          http://www.domain.com/$1 [R=301,L]                      
</Directory>
<Directory /var/www/vhosts/sonidon.com/httpdocs/folder/>
    RewriteEngine on
    RewriteRule ^$          ../blog/index.php
    #ADDED LINE BELOW
    RewriteRule ^/$          ../blog/index.php
</Directory>