【问题标题】:Additional htaccess rule to remove .php extension doesn't work for wordpress blog删除 .php 扩展名的附加 htaccess 规则不适用于 wordpress 博客
【发布时间】:2026-01-29 15:40:02
【问题描述】:

我有一个 wordpress 博客,其中我们已经有以下 htaccess 代码。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php

</IfModule>

# END WordPress

现在我想添加另一个规则以从特定 URL 中删除 .php 扩展名。

说。我们有 abc.com/def/ghi.php

我想要一个规则来忽略这个特定 url 的 .php 扩展名。我尝试了以下但它不起作用。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
RewriteRule ^(def)/(ghi)/?$ /$1.php [L,NC]
</IfModule>

# END WordPress

我错过了什么吗?

【问题讨论】:

  • 您需要将其移至规则顶部
  • @cmorrissey 是对的。 [L]-flag 表示最后一条规则,因此如果匹配 WP-index,则不处理其他规则。
  • 此规则还将在内部调用脚本/def.php...
  • @cmorrissey 我将它替换到顶部,但仍然没有运气。您能否发布更新后的代码作为答案?
  • @arkascha 你能更正代码并作为答案发布吗?

标签: php wordpress apache .htaccess mod-rewrite


【解决方案1】:

您需要更正 .php 添加规则的正则表达式并将其保留在 WP 的前端控制器规则之前:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^index\.php$ - [L]

RewriteRule ^(def|ghi)/?$ $1.php [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php

</IfModule>    
# END WordPress

【讨论】: