【发布时间】:2017-04-14 12:45:55
【问题描述】:
我有两个域:
maindomain.comwww.addondomain.com
maindomain.com 中的 .htaccess 文件具有此重定向
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?maindomain\.com)$ [NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]
它将 www 重定向到非 www 版本。
addondomain.com 中的另一个 .htaccess 文件有这些重定向
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^addondomain.com$
RewriteRule ^(.*)$ "http\:\/\/www\.addondomain\.com\/$1" [R=301,L]
RewriteCond %{HTTP_HOST} ^addondomain\.maindomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.addondomain\.maindomain\.com$
RewriteRule ^(.*)$ "http\:\/\/www\.addondomain\.com\/$1" [R=301,L]
RewriteCond %{HTTP_HOST} ^maindomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.maindomain\.com$
RewriteRule ^(.*)$ "http\:\/\/www\.addondomain\.com\/$1" [R=301,L]
所有页面都可以很好地重定向,但是当我将另一个 .htaccess 文件放在子目录中时,重定向不起作用。所以,我把这些规则写在image子目录中。
RewriteCond %{HTTP_HOST} ^addondomain.com$
RewriteRule ^(.*)$ "http\:\/\/www\.addondomain\.com\/$1" [R=301,L]
RewriteCond %{HTTP_HOST} ^addondomain\.maindomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.addondomain\.maindomain\.com$
RewriteRule ^(.*)$ "http\:\/\/www\.addondomain\.com\/$1" [R=301,L]
RewriteCond %{HTTP_HOST} ^maindomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.maindomain\.com$
RewriteRule ^(.*)$ "http\:\/\/www\.addondomain\.com\/$1" [R=301,L]
现在,当我尝试访问 addondomain.maindomain.com/image/1.png 时,它会重定向到 addondomain.maindomain.com/1.png,并出现 404 错误。不知何故,image 目录丢失了。我需要另一个.htaccess 子目录中的文件。
UPDATE#1: addondomain 也是maindomain 的子域,目录结构是:
/public_html
.htaccess
home.php (page of main domain)
/addondomain.com (directory)
home.php (page of addondomain)
.htaccess
/image (directory)
.htaccess
1.png
更新#2:
如果我这样设置.htaccess,这会起作用:
RewriteCond %{HTTP_HOST} ^(www\.)?maindomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.addondomain.com/image/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^addondomain.com$
RewriteRule ^(.*)$ http://www.addondomain.com/image/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^addondomain\.maindomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.addondomain\.maindomain\.com$
RewriteRule ^(.*)$ http://www.addondomain.com/image/$1 [R=301,L]
有什么方法可以使用一些代码(我有点新)代替图像
RewriteRule ^(.*)$ http://www.addondomain.com/.*$/$1 [R=301,L]
【问题讨论】:
-
能否请您提供您的目录结构。您的
addondomain.com是否指向maindomain.com文档根目录的子目录?.htaccess文件沿文件系统路径继承,但是默认情况下不继承 mod_rewrite 指令。通常最好避免子目录中有多个.htaccess文件。 -
“不知怎的,图像文件夹被切断了。” - 您在图像子目录中的规则不包括替换中的“图像”文件夹,因此这就是图像文件夹被“切断”的原因。使用目录前缀会更容易(在
.htaccess中),而不是显式指定绝对 URL。 -
" 使用目录前缀会更容易(在 .htaccess 中),而不是明确指定绝对 URL" 如何使用目录前缀,可以添加一些代码
-
为什么要在
addondomain.com的子目录中再放一个.htaccess?大概你做的不仅仅是域规范化?您需要重定向所有内容吗?例如,就个人而言,我会简单地 403 对maindomain.com/addondomain.com/的所有请求。您是否还有其他需要考虑的子域? -
(抱歉,我对目录前缀的评论不适用于此处,因为您正在规范化域。)
标签: .htaccess redirect mod-rewrite addon-domain