Apache “修改”的“重写规则”;www到非www“;不';t重定向子页

Apache “修改”的“重写规则”;www到非www“;不';t重定向子页,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,在我提出这个问题之前,我已经进行了彻底的研究。请听我说完: 我正在尝试将我的博客从www重定向到非www,但它不会重定向任何子页面。我还有一个http>https重定向,它对域和子页面都非常有效。以下是我在.htaccess中的规则 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L]

在我提出这个问题之前,我已经进行了彻底的研究。请听我说完:

我正在尝试将我的博客从www重定向到非www,但它不会重定向任何子页面。我还有一个http>https重定向,它对域和子页面都非常有效。以下是我在.htaccess中的规则

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteRule ^^rcp-pep-ipn //?rcp-pep-listener=IPN [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    RewriteBase /
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} ^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
    </IfModule>
    # END WordPress
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写规则^rcp pep ipn/?rcp pep listener=ipn[QSA,L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
重写基/
重写cond%{HTTPS}关闭[或]
重写cond%{HTTP_HOST}^www\。[北卡罗来纳州]
重写cond%{HTTP_HOST}^(?:www\)?(.+)$[NC]
重写规则^https://%1%{REQUEST_URI}[L,NE,R=301]
#结束WordPress

如果我在这里做错了什么,我真的很想得到一个解释。自从我在所有其他网站上使用了完全相同的代码(来自第二个RewriteBase/)以来,我真的很紧张,它工作得完美无缺。

你应该把那些协议检查条件带到一开始。你在规则范围内也有一些问题。尝试:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} off [OR]
  RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
  RewriteRule ^(.*)$ https://%1/$1 [R=301,NE,L]
  RewriteRule ^rcp-pep-ipn /?rcp-pep-listener=IPN [QSA,L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>

重新启动发动机
重写cond%{HTTPS}关闭[或]
重写条件%{HTTP_HOST}^www\(.*)[NC]
重写规则^(.*)$https://%1/$1[R=301,NE,L]
重写规则^rcp pep ipn/?rcp pep listener=ipn[QSA,L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]

谢谢@revo。你能给我解释一下你对代码所做的修改和我犯的错误吗?我想学习这些东西。为延迟@revo道歉。为了安全起见,我做了备份。你的代码工作得很好!谢谢!你能解释一下你所做的改变吗?我在RewriteEngine下面添加了RewriteBase/我看到您删除了RewriteRule^index\.php$-[L]并保留了RewriteRule/index.php[L]位于底部。这会引起什么问题吗?另外,仅供我参考,由于这些规则需要移到顶部,旧规则(移到底部)会不会带来任何问题?该规则是多余的,因此我将其删除。主要的变化是改变https规则的位置。他们应该在上面。关于https的指令有一些问题。您在反复检查
www.
%1
返回引用为空,但未找到
www.
,导致没有主机名。感谢您在@revo进行的清晰解释。所以这些规则没有任何问题就被转移到了底层,对吗?对不起,如果我在这里偏执,因为这个网站是我的生计。