加载项域和.htaccess文件重定向
我有两个领域:加载项域和.htaccess文件重定向,.htaccess,redirect,mod-rewrite,addon-domain,.htaccess,Redirect,Mod Rewrite,Addon Domain,我有两个领域: maindomain.com www.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版本 addond
maindomain.com
www.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错误。不知怎么回事,图像
目录丢失了。我需要子目录中的另一个.htaccess
文件
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]
更新#1:addondomain
是main域的子域
而且,目录结构是:
/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]
虽然
.htaccess
文件(通常)是沿文件系统路径“继承”的,但mod_rewrite指令不是(默认情况下)。子目录中.htaccess
文件中的mod_rewrite指令将完全覆盖父目录中的指令。这就是为什么您必须跨多个.htaccess
文件复制指令
但是,您可以使用子目录中.htaccess
文件中的RewriteOptions
指令“继承”父指令。例如:
RewriteOptions inherit
/public_html
.htaccess
home.php (page of main domain)
/addondomain.com (directory)
home.php (page of addondomain)
.htaccess
/image (directory)
1.png
这导致父目录中的mod_rewrite指令被“复制”到当前的.htaccess
文件中。这可能会帮助您解决当前的问题,但是,过分依赖mod_重写继承通常是一个坏主意,因为它可能会导致难以调试的意外结果。请注意,指令实际上是“复制的”,因此您可以发现可能在父目录中工作的RewriteRule
模式在子目录中不再匹配-因此这不是一个神奇的修复。此外,在文件系统路径上有多个.htaccess
文件会使系统难以管理。最好在根目录中只有一个.htaccess
文件
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]
您尚未说明为什么需要在/images
子目录中添加.htaccess
文件。对于域规范化(这是您的指令所做的全部工作),它当然不是必需的。理想情况下,您应该在父.htaccess
文件中包含必要的指令
就我个人而言,我会通过maindomain.com
阻止(即403禁止)所有请求。这简化了addondomain.com/.htaccess
文件:
RewriteEngine On
# Block all access via maindomain.com
RewriteCond %{HTTP_HOST} \.maindomain\.com$ [OR]
RewriteRule ^ - [F]
# Canonicalise www.addondomain.com
RewriteCond %{HTTP_HOST} =addondomain\.com$
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
# Any additional rewrites relating to the /image subdirectory (for example)
#RewriteRule ^image/(.+) /get-image.php?file=$1 [L]
另一种避免maindomain.com
干扰addondomain.com
的方法是在maindomain.com
目录树之外创建目录(子域和addondomain.com
指向该目录)。例如:
RewriteOptions inherit
/public_html
.htaccess
home.php (page of main domain)
/addondomain.com (directory)
home.php (page of addondomain)
.htaccess
/image (directory)
1.png
请把你的目录结构包括进去好吗。您的
addondomain.com
是否指向maindomain.com
文档根目录的子目录.htaccess
文件沿文件系统路径继承,但是默认情况下,mod_rewrite指令不会继承。通常,最好避免子目录中有多个.htaccess
文件。“一些方式,图像文件夹被切断。”-图像子目录中的规则不包括替换中的“图像”文件夹,这就是图像文件夹被“切断”的原因。(在.htaccess
中)使用目录前缀比显式指定绝对URL更容易。“在.htaccess中)使用目录前缀比显式指定绝对URL更容易”如何使用目录前缀,您可以添加一些代码吗?为什么需要在addondomain.com
的子目录中添加另一个.htaccess
?想必您所做的不仅仅是域规范化?你需要重定向所有内容吗?例如,就我个人而言,我只需403所有对maindomain.com/addondomain.com/
的请求。您是否有其他需要说明的子域?(抱歉,我关于目录前缀的评论在此不适用,因为您正在规范化该域。)通过addondomain.com
访问时,上述内容不应触发403?(RewriteOptions
指令只是一个例子,我不建议您在当前配置中使用它-这应该是不必要的。但是您没有解释您使用此设置的具体操作?您只是规范化了域吗?)