所有 Wordpress 页面上的 Apache ToLower(不是 PDF/CSS/JS)

所有 Wordpress 页面上的 Apache ToLower(不是 PDF/CSS/JS)

我在对包含大写字母到小写的 URL 执行 301 重定向时遇到问题,但不包括静态文件(PDF/CSS/JS/JPEG/JPG/PNG/WEBP...等)。例如:

https://www.example.com/Page/会成为
https://www.example.com/page/

https://www.example.com/Clear_IMAGE.png不会改变。

在我的 VirtualHost conf 文件中:

RewriteMap lc int:tolower 

在我的.htaccess

RewriteRule ^/(.*)$ /${lc:$1} !^(pdf|js|css|png|jpg|jpeg|webp)

但是这对我的 URL 没有任何影响。

答案1

RewriteRule ^/(.*)$ /${lc:$1} !^(pdf|js|css|png|jpg|jpeg|webp)

你说这“没有任何效果”,然而,这在语法上是无效的(“坏标志参数”),并且应该500 内部服务器错误导致中断!?如果没有,那么可能还有其他更根本的问题吗?

然而,这还存在其他问题:

  • 在 中.htaccess,匹配的 URL 路径RewriteRule 图案不以斜线开头。
  • lc如果源请求包含大写字母,则仅应将 URL 改为小写(即调用重写映射),否则自然会出现重定向循环。
  • 正则^(pdf|js|css|png|jpg|jpeg|webp)表达式匹配的字符串是开始使用这些字符。您需要(否定)匹配以点 + 文件扩展名结尾的字符串。

请尝试以下操作:

RewriteCond %{REQUEST_URI} !\.(pdf|js|css|png|jpe?g|webp)$ [NC]
RewriteRule [A-Z] ${lc:%{REQUEST_URI}} [R=301,L]

.htaccess请注意,这必须放在文件顶部附近WordPress 代码块。即在# BEGIN WordPress注释标记之前。

RewriteRule 图案 [A-Z]只是测试 URL 路径中至少有 1 个大写字母。

状况RewriteCond指令)排除以任何所述文件扩展名结尾的 URL(不区分大小写)。

请注意,REQUEST_URI服务器变量已包含斜杠前缀,因此从开头省略了该前缀代换细绳。

注意:首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。


您无需排除(不断增长的)已知文件类型列表,而是可以简单地排除任何看起来具有文件扩展名的请求。(假设您的 WordPress 页面 URL 没有文件扩展名。)例如,URL 路径末尾有一个点,后面跟着 2 到 4 个字母/数字。例如:

RewriteCond %{REQUEST_URI} !\.\w{2,4}$
:

由于简写字符类已经包含大写和小写字母,NC因此这里不需要该标志。\w

相关内容