加载项域和.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
    指令只是一个例子,我不建议您在当前配置中使用它-这应该是不必要的。但是您没有解释您使用此设置的具体操作?您只是规范化了域吗?)