htaccess重定向页面不起作用

时间:2017-09-06 23:43:59

标签: wordpress .htaccess cpanel

我使用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.cacornwallrealty.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

1 个答案:

答案 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,否则可能无法正确处理。)

你可以:

  1. 在现有指令之前,将以下指令添加到/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文件中的指令。

  2. 或者,

    1. 将根RewriteRule文件中的.htaccess指令更改为:

      RewriteRule ^ http://nextlevelpm.ca%{REQUEST_URI} [R=301,L]
      

      并在/home/.htaccess文件中启用mod_rewrite继承,以便在子指令之前执行父指令,方法是在现有WordPress指令之前添加以下指令(实际上,它不是; t实际上你把它放在哪里,但它在顶部更合乎逻辑):

      RewriteOptions InheritBefore
      
    2. 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)?$