Apache实现WordPress全站URL小写301重定向(排除静态文件)的配置问题求助
Apache实现WordPress全站URL小写301重定向(排除静态文件)的配置问题求助
嗨,我看你在配置Apache的URL小写重定向时遇到了问题,还要排除指定的静态文件,咱们一步步捋清楚问题出在哪,再给你修正后的配置方案~
首先,先说说你现有配置里的几个关键问题:
- .htaccess路径匹配错误:在.htaccess文件中,请求URL是已经去掉当前目录前缀的,所以规则开头的
^/(.*)$是多余的,应该直接用(.*)匹配整个请求路径。 - 排除条件写法不对:你把排除规则
!^(pdf|js|css|png|jpg|jpeg|webp)放在RewriteRule末尾,这不符合Apache重写规则的语法,得用RewriteCond来定义排除条件才行。 - 匹配范围偏差:你当前的排除正则是匹配开头为这些字符串的URL,但实际上你要排除的是后缀为这些格式的静态文件,应该匹配URL结尾的后缀,而非开头。
接下来给你正确的配置步骤,照着调整就能解决问题:
第一步:确认VirtualHost的RewriteMap配置
你已经在VirtualHost里定义了RewriteMap lc int:tolower,这部分是对的!要注意RewriteMap只能在Server Config或VirtualHost上下文里定义,不能放在.htaccess中,修改VirtualHost后记得重启Apache让配置生效。
第二步:修正.htaccess的重写规则
把你当前的.htaccess规则替换成下面的内容,并且一定要放在WordPress默认的Rewrite规则之前(WordPress的规则会优先处理友好链接,顺序错了会被覆盖):
# 启用重写引擎(如果你的.htaccess里已有这行,可跳过) RewriteEngine On # 排除指定后缀的静态文件,[NC]表示不区分大小写(匹配.PDF、.pdf等所有大小写组合) RewriteCond %{REQUEST_URI} !\.(pdf|js|css|png|jpg|jpeg|webp)$ [NC] # 检查URL是否包含大写字母,避免对已小写的URL重复重定向,防止循环 RewriteCond %{REQUEST_URI} [A-Z] # 执行301永久重定向,将URL转为小写,[L]表示这是最后一条规则,不再往下执行 RewriteRule (.*) ${lc:$1} [R=301,L]
额外注意事项
- 测试阶段用302:测试时可以把
[R=301,L]改成[R=302,L],因为301是永久重定向会被浏览器缓存,万一配置有问题,清理缓存会很麻烦,测试没问题再改回301。 - 确认mod_rewrite已启用:如果Apache没开启mod_rewrite模块,所有重写规则都不会生效,可以通过
a2enmod rewrite命令启用,之后重启Apache。 - WordPress规则顺序:务必把这些重定向规则放在WordPress自动生成的
# BEGIN WordPress注释之前,否则WordPress的规则会先执行,导致你的重定向规则不生效。
调整后,像https://www.example.com/Page/就会被301重定向到https://www.example.com/page/,而https://www.example.com/Clear_IMAGE.png这类静态文件则不会被修改啦~
备注:内容来源于stack exchange,提问作者PublicDisplayName
相关产品推荐
相关产品推荐

