Apache服务器配置.htaccess实现多语言404页面正确跳转
解决Apache .htaccess多语言404页面配置问题
你的问题出在Rewrite规则的顺序上:Apache会从上到下依次匹配规则,你原来的第一个规则^(.*)$会匹配所有不存在的请求(包括/ru/xxx这类路径),导致第二个针对ru/的规则根本没有执行的机会。
修正后的配置
把更具体的规则(ru/开头的请求)放在通用规则前面,同时加上R=404确保返回正确的404状态码(否则浏览器会识别为重定向而非错误页面):
RewriteEngine On RewriteBase / # 处理俄语路径下的不存在页面 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ru/(.*)$ /ru/404.html [L,R=404] # 处理默认语言(其他路径)的不存在页面 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /404.html [L,R=404]
配置说明
RewriteCond %{REQUEST_FILENAME} !-f:确保请求的不是真实存在的文件RewriteCond %{REQUEST_FILENAME} !-d:确保请求的不是真实存在的目录[L]:表示这是最后一条匹配的规则,停止后续规则处理[R=404]:强制返回404 HTTP状态码,让浏览器正确识别为错误页面(而不是302重定向)
这样配置后:
- 访问
example.com/non-existent_page会显示根目录的404.html,返回404状态 - 访问
example.com/ru/non-existent_page会显示ru/404.html,返回404状态
内容的提问来源于stack exchange,提问作者testovich
相关产品推荐
相关产品推荐

