我无法在我的.htaccess
中找到这个看似mod_rewrite问题的来源,以便进行多站点WordPress安装。
问题在于,当我尝试直接在地址栏中输入页面时(例如example.com/page
),它会将我重定向到wp-login.php
脚本/页面。
如果我先加载example.com
,请先键入尾部斜杠和页面(例如example.com
,然后添加/page
并按Enter键),它就可以了。
我已将此问题移交给我的网络托管团队,他们无法解决问题。我之前也曾在网络托管工作。
该站点当前不是“主域”,但它的所有文件都在主根的子目录中(例如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
答案 0 :(得分:0)
当我使用尾部斜杠(例如
/page/
)加载它时,它可以正常工作;当我在菜单中加载它时,它加载斜杠。当我只输入没有尾部斜杠时,[它不起作用]。
你错过了问题中的尾随斜线,这使得这个问题更难以理解。
要在所有WordPress网址上强制使用尾部斜杠,您可以尝试在 WordPress前端控制器之前立即添加以下指令。
RewriteRule !./$ %{REQUEST_URI}/ [R=302,L]
请注意,这是302(临时)重定向。只有当您确定它正常工作时才将其更改为301(永久)重定向。 301s被浏览器缓存,因此可能会使测试出现问题。
这应该在这里:
# Prevent further processing for existing files/directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# >>> HERE <<<
# Front controller
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
如果您只需要申请特定主机,则添加条件以检查此情况。例如:
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule !./$ %{REQUEST_URI}/ [R=302,L]
我已经读过最好将末尾的斜线硬编码,因为它可以加速broswer。
这仅适用于物理目录,而不适用于WordPress网址。对于WP URL(或任何其他类型的虚拟 URL),它没有区别,只是个人偏好。 (FWIW,除非直接链接到文件系统目录,否则我不希望使用尾部斜杠。)
对于物理目录,Apache(mod_dir)将发出301重定向以附加尾部斜杠。这是必要的,以便能够从该目录提供目录索引(例如index.php
)。因此,为了避免额外的重定向,您应该链接到带有斜杠的目录。