【问题标题】:.htaccess conflict in Wordpress directoryWordpress 目录中的 .htaccess 冲突
【发布时间】:2020-10-07 06:52:53
【问题描述】:

我的网络服务器上公共文件的根目录中有一个 htaccess 文件:

Header set Content-Security-Policy: upgrade-insecure-requests

DirectoryIndex index.html index.php parking-page.html

RewriteEngine on
# Force www
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Force SSL
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE]

Options -Indexes

ErrorDocument 404 https://%{HTTP_HOST}/index.php

# for JWT auth
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
# end for JWT auth

我在 /blog 上安装了一个 Wordpress 博客,Wordpress 在该文件夹中创建了一个 .htaccess 文件:

# BEGIN WordPress
# The directives (lines) between `BEGIN WordPress` and `END WordPress` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

# END WordPress

我注意到,当我访问 http://example.com/blog 时,它会将我重定向到 https://www.example.com/index.php ,而它应该转到 https://www.example.com/blog 。 其他页面,例如http://example.com/contact-us,成功重定向到https://www.example.com/contact-us

更新:

【问题讨论】:

    标签: php wordpress .htaccess


    【解决方案1】:

    对于从非 www 到 www 的重定向,您的重写规则中可能存在错误。我不知道你从哪里得到那个代码,但我以前从来没有见过这样的尝试。

    您可以将强制 www 和 SSL 的单独规则替换为一个,如下所示:

    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ https://www.example.com%{REQUEST_URI} [L,R=302]
    

    重要提示:请注意使用 302 重定向 - 在确认其有效之前,您应该只使用临时重定向。 只有当你知道它正在工作时,你才应该将其更改为 301。

    由于您在当前规则中使用了 301 重定向,它会被缓存并可能需要一段时间才能清除。

    注意,对于安装在子文件夹中的 WP,您需要在子文件夹的.htaccess 文件中添加此 Rewrite 规则。


    请注意,您的重写规则没有被触发......它只是看起来有效,因为您在 WP 设置中将 https 和 www 作为站点 URL。

    因此,http://example.com/blog 变为 https://www.example.com/index.php 的原因可能不是因为重写,而是因为您的 .htaccess 中的以下行被触发:

    ErrorDocument 404 https://%{HTTP_HOST}/index.php
    

    如果进行上述更改不起作用,您可以将其视为可能的原因。

    【讨论】:

    • 感谢您的建议!从stackoverflow.com/a/24711557 得到我的代码。您的解决方案不会将 www 页面重定向到非 www 页面,而不是相反吗?另外,切换到 302 时我应该关注 SEO 吗?
    • @binoculars 很好发现 :) 我从错误的例子中得到了这个(我最近回答了一个重定向到非 www 的问题)。我已经使用直接取自我自己网站之一的代码更新了问题中的重写规则,所以我知道这次是正确的:) 正如我在笔记中提到的,当您确认重定向后将 302 更改为 301工作中。始终使用 302 来测试重定向,并且只有在您知道它有效时才应该更改它。如果您第一次没有正确使用 301 进行测试,可能会导致缓存出现问题。
    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    相关资源
    最近更新 更多