WordPress 永久链接不适用于非纯文本设置(例如月份和名称)
WordPress permalinks do not work with non-Plain setting (e.g. Month and name)
TL;DR
mod_rewrite
已加载
.htaccess
可写
AllowOverride ALL
设置
LogLevel debug
设置
- 日志显示重定向循环(见下文)
详情
WordPress 博客位于文件系统位置 /var/www/html/
(即 index.php
在那里,所有 wp-*.php
文件都在其中,例如 wp-settings.php
)。
WordPress 博客的 常规设置 WordPress 地址 (URL) 和 站点地址 (URL) 都设置为 https://example.com/blog
.
当我将永久链接设置设置为月份和名称(或除Plain),.htaccess
文件会自动修改为包含以下 mod_rewrite
块,并且 URL 路径会相应调整,例如/blog/2019/03/hello-world/
,但访问 URL 会导致 内部服务器错误。
# BEGIN WordPress
<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
日志显示以下内容:
Request exceeded the limit of 10 internal redirects due to probable configuration error.
AH00121: r->uri = /blog/index.php, referer: https://staging.example.com/blog/
AH00122: redirected from r->uri = /blog/index.php, referer: https://staging.example.com/blog/
... the above line repeated ...
AH00122: redirected from r->uri = /2019/03/10/hello-world/, referer: https://staging.example.com/blog/
成功的迹象...
将 永久链接设置 设置为 Plain 后,.htaccess
文件基本上是空的,但链接有效它们是不受欢迎的形式 /?p=123
:
# BEGIN WordPress
# END WordPress
当我将 Custom Structure 设置为 /index.php/%year%/%monthnum%/%postname%/
时,博客链接更新为 /blog/index.php/2019/03/hello-world/
格式并且它们有效,但现在 URL 很丑(/index.php/
)。
那么为什么它不能与 /%year%/%monthnum%/%postname%/
和自动设置的 .htaccess
指令一起使用?
血淋淋的细节
这应该无关紧要,但需要注意的是:此 WordPress 博客 托管在 虚拟机实例 中(Google云平台.
的Compute Engine的VM实例)
从最后一条规则中删除 /blog
(RewriteBase
保持不变)。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
TL;DR
mod_rewrite
已加载.htaccess
可写AllowOverride ALL
设置LogLevel debug
设置- 日志显示重定向循环(见下文)
详情
WordPress 博客位于文件系统位置 /var/www/html/
(即 index.php
在那里,所有 wp-*.php
文件都在其中,例如 wp-settings.php
)。
WordPress 博客的 常规设置 WordPress 地址 (URL) 和 站点地址 (URL) 都设置为 https://example.com/blog
.
当我将永久链接设置设置为月份和名称(或除Plain),.htaccess
文件会自动修改为包含以下 mod_rewrite
块,并且 URL 路径会相应调整,例如/blog/2019/03/hello-world/
,但访问 URL 会导致 内部服务器错误。
# BEGIN WordPress
<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
日志显示以下内容:
Request exceeded the limit of 10 internal redirects due to probable configuration error.
AH00121: r->uri = /blog/index.php, referer: https://staging.example.com/blog/
AH00122: redirected from r->uri = /blog/index.php, referer: https://staging.example.com/blog/
... the above line repeated ...
AH00122: redirected from r->uri = /2019/03/10/hello-world/, referer: https://staging.example.com/blog/
成功的迹象...
将 永久链接设置 设置为 Plain 后,.htaccess
文件基本上是空的,但链接有效它们是不受欢迎的形式 /?p=123
:
# BEGIN WordPress
# END WordPress
当我将 Custom Structure 设置为 /index.php/%year%/%monthnum%/%postname%/
时,博客链接更新为 /blog/index.php/2019/03/hello-world/
格式并且它们有效,但现在 URL 很丑(/index.php/
)。
那么为什么它不能与 /%year%/%monthnum%/%postname%/
和自动设置的 .htaccess
指令一起使用?
血淋淋的细节
这应该无关紧要,但需要注意的是:此 WordPress 博客 托管在 虚拟机实例 中(Google云平台.
的Compute Engine的VM实例)从最后一条规则中删除 /blog
(RewriteBase
保持不变)。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress