无法从子目录中的 WordPress 基本 URL 中删除尾部斜杠

问题描述 投票:0回答:1

我在目录

www.example.com/blog/
中有一个 WordPress,它工作正常。所有的 URL 都以 '/' (
www.example.com/blog/article/
) 结尾,但我已经从设置/永久链接 (
www.example.com/blog/article
) 中更正了它。只有一个 URL,我无法删除最后的 '/',
www.example.com/blog/
,我需要它是
www.example.com/blog
.

当我在设置/永久链接中保存时,WordPress 将

.htaccess
修改为:

# BEGIN All In One WP Security
#AIOWPS_BLOCK_SPAMBOTS_START
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} ^(.*)?wp-comments-post\.php(.*)$
RewriteCond %{HTTP_REFERER} !^http(s)?://(.*)?\.example\.com/blog [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule .* http://127.0.0.1 [L]
</IfModule>
#AIOWPS_BLOCK_SPAMBOTS_END
# END All In One WP Security

# BEGIN WordPress
# Las directivas (líneas) entre «BEGIN WordPress» y «END WordPress» son
# generadas dinámicamente y solo deberían ser modificadas mediante filtros de WordPress.
# Cualquier cambio en las directivas que hay entre esos marcadores serán sobrescritas.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

# END WordPress

我已经将 RewriteBase

/blog/
更改为 RewriteBase /blog,但这不是解决方案。我不明白为什么WordPress直接用
/blog/
而不是/blog生成RewriteBase,因为设置/常规中的站点和WordPress地址是
www.example.com/blog
.

从谷歌浏览器检查我看到有一个从

www.example.com/blog
www.example.com/blog/
的301重定向,但我认为这是由WordPress本身完成的。

php wordpress .htaccess subdirectory trailing-slash
1个回答
1
投票

这是一个古老的(在网络时代)难题。

如果

https://example.com/foo/index.html
是 Apache 或 nginx 服务器上实际文件的 URL,这意味着
https://example.com/foo
奇怪的是,它不是也不可能是有效的 URL。 URL 映射到文件名,
foo
不是文件名。它是一个目录名称。但是 Apache 和 nginx 不提供目录内容。另一方面,Web 服务器看到
https://example.com/foo/
,一个丢失的文件名,并替换为默认文件名(
index.php
在 WordPress 世界中)。

但是每当我们忘记尾随的

/
时,它会让人们疯狂地获得404。因此,Web 服务器通过响应 301(永久重定向)响应来处理此问题,将浏览器重定向到
https://example.com/foo/
,包括结尾的
/
。在页面加载结束时,您会在浏览器地址栏中看到结尾的
/

如果你尝试的话,你可以在你的浏览器 devtools 网络选项卡中看到这个展开。

所以,我相信您正在尝试做一些在 WordPress over Apache 或 nginx 网络服务器世界中不容易完成的事情。

其他最近开发的 Web 服务器软件(node express 等)具有更灵活的请求路由(URL 路径名解释)设施。但是 Apache 的起源是在 Web 服务器简单地将本地文件系统映射到 URL 的时代。

© www.soinside.com 2019 - 2024. All rights reserved.