【发布时间】:2017-10-16 20:15:37
【问题描述】:
对于多站点 WordPress 安装,我无法在我的 .htaccess 中找到这个看似 mod_rewrite 问题的来源。
问题是当我尝试直接在地址栏中输入页面时(例如example.com/page),它会将我重定向到wp-login.php 脚本/页面。
如果我先加载example.com,然后输入尾部斜杠和页面(例如,先输入example.com,然后添加/page 并按回车键),它可以工作。
我已将此问题移交给我的网络托管团队,但他们无法解决此问题。我之前也从事过网络托管工作。
该站点目前不是“主域”,但它的所有文件都位于主根目录的子目录中(例如parent/public_html/subdir),但它位于自己的域和文档根目录中。这是站点 1,博客 2(在 wp-config.php 和 DB 中)。
WordPress 多站点安装加载一切正常。
这是我的.htaccess:
## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
</IfModule>
## EXPIRES CACHING ##
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} ^domain\.tld$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.tld$
RewriteRule ^(.*)$ https://www.domain.tld/$1 [R,L]
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
# Wordfence WAF
<Files ".user.ini">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
# END Wordfence WAF
【问题讨论】:
-
这个
.htaccess文件在哪里?你还有其他.htaccess文件吗?这听起来不像是 mod_rewrite/.htaccess问题。您发布的.htaccess文件中肯定没有任何内容可以触发重定向到wp-login.php。这是 WordPress 会在应用程序代码中做的事情。 -
在这个子目录中有一个.htaccess,在父目录中也有。父级主要处理过期和缓存。不过我是认真的,它只是让我在加载主页后直接输入页面的 URL,而无需再次输入完整的 URL(例如,仅通过添加到现有 URL)。
-
如果您立即请求
/anotherpage- 会发生什么?那样有用吗?在什么时候您需要返回请求裸域?请求中一定有一些不同的东西 - 检查正在发送的 HTTP 请求标头。在初始请求中可能没有会话/cookie,因此在访问example.com/后,会话将启动并返回 cookie。对/page的请求可能取决于设置的会话/cookie(但这将是 WordPress,而不是.htaccess)。 -
所以,我将问题缩小到是 Wordpress 没有在目录末尾添加斜杠的问题。如果你手动添加它,它可以工作。
-
是的,这只是子目录的问题。当我用斜杠(例如/page/)加载它们时,它可以工作;当我在菜单中加载它时,它会加载斜杠。当我只键入没有斜杠时,我会假设 .htaccess 会找到该页面并在最后将我重写为破折号。我读过最好在结尾处硬编码斜杠,因为它可以加快浏览器的速度。所以,我只需要知道如何修改它来添加它。
标签: wordpress apache .htaccess mod-rewrite