我有两个域名:
maindomain.com
www.addondomain.com
.htaccess
中的maindomain.com
文件具有此重定向
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?maindomain\.com)$ [NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]
它将www重定向到非www版本。
.htaccess
中的另一个addondomain.com
文件具有这些重定向
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
文件。
更新#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]
答案 0 :(得分:0)
虽然.htaccess
文件(通常)是沿文件系统路径“继承”的,但mod_rewrite指令不是(默认情况下)。子目录中.htaccess
文件中的mod_rewrite指令将完全覆盖父目录中的指令。这就是您必须跨多个.htaccess
文件复制指令的原因。
但是,您可以使用子目录中RewriteOptions
文件中的.htaccess
指令“继承”父指令。例如:
RewriteOptions inherit
这会导致父目录中的mod_rewrite指令被“复制”到当前的.htaccess
文件中。这可能有助于您当前的情况,但是,过分依赖mod_rewrite继承通常是一个坏主意,因为它可能导致难以调试的意外结果。请注意,指令实际上是“复制”的,因此您可以找到可能在父目录中工作的RewriteRule
模式,在子目录中不再匹配 - 因此它不是一个神奇的修复程序。此外,在文件系统路径中包含多个.htaccess
文件可能会使系统难以管理。最好在根目录中只有一个.htaccess
文件。
您尚未声明为什么您需要.htaccess
子目录中的其他/images
文件。对于域规范化(这是你的指令正在做的所有),它当然不是必需的。理想情况下,您应该在父.htaccess
文件中包含必要的指令。
就个人而言,我只是通过maindomain.com
阻止(即403 Forbidden)所有请求。这简化了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
的另一种方法是在addondomain.com
目录树之外创建目录(子域和maindomain.com
指向) 。例如:
/public_html
.htaccess
home.php (page of main domain)
/addondomain.com (directory)
home.php (page of addondomain)
.htaccess
/image (directory)
1.png