我使用cPanel为我创建了一些重定向,以下是我.htaccess
文件中添加的内容
RewriteOptions inherit
RewriteEngine on
RewriteCond %{HTTP_HOST} ^nextlevelpropertymanagement\.ca$ [OR]
RewriteCond %{HTTP_HOST} ^www\.nextlevelpropertymanagement\.ca$
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^(.*)$ "http\:\/\/nextlevelpm\.ca\/$1" [R=301,L]
RewriteCond %{HTTP_HOST} ^cornwallrealty\.ca$ [OR]
RewriteCond %{HTTP_HOST} ^www\.cornwallrealty\.ca$
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^(.*)$ "http\:\/\/nextlevelpm\.ca\/$1" [R=301,L]
如果我转到nextlevelpropertymanagement.ca
或cornwallrealty.ca
,重定向似乎有效;但是,如果我转到网站上的其他页面,例如cornwallrealty.ca/home/portal/
,则重定向不起作用。我想要发生的是:
cornwallrealty.ca/home/portal/
应重定向到nextlevelpm.ca/home/portal/
更新
/home/.htaccess
有这个:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /home/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /home/index.php [L]
</IfModule>
# END WordPress
答案 0 :(得分:0)
正在发生的事情是/home/.htaccess
中的mod_rewrite指令完全覆盖了父.htaccess
文件中的mod_rewrite指令。默认情况下不会继承mod_rewrite指令。
当前指令的格式不能简单地继承&#34;因为继承的指令实际上是&#34;复制&#34;到位,所以目录前缀自然会改变。在原始指令中,您正在捕获URL路径(即(.*)
),然后将其附加到替换(即$1
反向引用)。如果您只是继承了这些指令,则http://cornwallrealty.ca/home/portal/<something>
的请求最终将被重定向到http://nextlevelpm.ca/portal/<something>
- home
目录将丢失,因为RewriteRule
捕获的URL路径模式将是portal/<something>
。 (这也假设您在Apache 2.4+上使用InheritBefore
,否则可能无法正确处理。)
你可以:
在现有指令之前,将以下指令添加到/home/.htaccess
文件。
RewriteCond %{HTTP_HOST} ^(www\.)?nextlevelpropertymanagement\.ca [OR]
RewriteCond %{HTTP_HOST} ^(www\.)?cornwallrealty\.ca$
RewriteRule ^ http://nextlevelpm.ca%{REQUEST_URI} [R=301,L]
这有效地复制了父.htaccess
文件中的指令。
或者,
将根RewriteRule
文件中的.htaccess
指令更改为:
RewriteRule ^ http://nextlevelpm.ca%{REQUEST_URI} [R=301,L]
并在/home/.htaccess
文件中启用mod_rewrite继承,以便在子指令之前执行父指令,方法是在现有WordPress指令之前添加以下指令(实际上,它不是; t实际上你把它放在哪里,但它在顶部更合乎逻辑):
RewriteOptions InheritBefore
cPanel使用大量不必要的反斜杠转义并生成相当混乱的mod重写规则。
在根RewriteOptions inherit
文件中有.htaccess
指令有点不寻常 - 这意味着你是从另一个父配置继承的?这也会阻止您在父作用域中使用InheritDownBefore
,从而避免必须编辑子.htaccess
文件。
只有在cPanel中启用了自动SSL证书时才需要以下内容:
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$