Apache L 和 END 标志根据环境被忽略

Apache L and END flag are ignored depending of the environement

我运行在控制面板上安装 Wordpress,我想使用这个 htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(\/|)\d{4,7} - [L,NC,G]
    RewriteRule ^(\/|)\d{4,7} - [END,NC,G]

    
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^.*$ https://www.%1%{REQUEST_URI} [L,NE,R=301,QSD]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress

如果我在 cpanel 环境中使用此 htaccess,当我访问 url 时: https://www.example.com/12345 我得到了 404 而不是 410

如果我 运行 它在干净的环境中使用 linux 交钥匙 : 它工作正常我有一个 410 似乎在 cpanel 环境中 [L] 或 [END] 标志被忽略

尝试将 410 错误文档重置为默认值:

ErrorDocument 410 default

我认为问题与 cPanel 本身无关,但服务器定义的 ErrorDocument 可能会将 410 转换为 404,这在共享服务器环境中并不罕见。

RewriteRule ^(\/|)\d{4,7} - [L,NC,G]
RewriteRule ^(\/|)\d{4,7} - [END,NC,G]

但是同时拥有这两个指令是没有意义的。第二个指令永远不会被处理。

严格来说,G 标志 意味着 L 无论如何。因此,L 标志是多余的。 (与 NC 标志一样。)

但在此上下文中使用 LEND 没有区别。