You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache RewriteCond配置异常:静态文件加载失败与URL重定向错误

Apache2多语言站点配置修复方案

环境与需求

  • 站点目录结构:
    + /var/www/website
      |- es  # 西班牙语版本文件目录
      |- en  # 英语版本文件目录(默认语言)
    
  • 预期URL规则:
    • 英语版本:
      • https://example.com/ 直接返回英语内容
      • https://example.com/en/ 自动重定向到 https://example.com/
    • 西班牙语版本:
      • https://example.com/es/ 返回西班牙语内容
    • 静态文件必须从对应语言目录加载(比如西班牙语下的静态文件需通过https://example.com/es/image.png访问)

当前配置的问题

  1. 静态文件加载失败:访问https://example.com/image.png时,服务器无法找到对应语言目录下的文件
  2. 英语版本重定向逻辑错误:当前配置会把根目录请求跳转到/en/,和预期的/en/跳转到根目录相反

修复后的完整Apache2配置

<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /var/www/website

    <Directory /var/www/website>
        Require all granted
        AllowOverride all
        RewriteEngine on
        RewriteBase /

        # 把/en/开头的请求重定向到根目录,保留后续路径
        RewriteRule ^en/(.*)$ /$1 [R=301,L]

        # 根目录访问时的自动语言跳转
        # 优先匹配西班牙语请求,跳转到/es/
        RewriteCond %{HTTP:Accept-Language} ^es [NC]
        RewriteRule ^$ /es/ [R,L]
        # 非西语/英语请求,默认跳转到根目录(英语版本)
        RewriteCond %{HTTP:Accept-Language} !^en [NC]
        RewriteCond %{HTTP:Accept-Language} !^es [NC]
        RewriteRule ^$ / [R,L]

        # 内部重写,确保内容从对应语言目录读取
        # 处理/es/路径下的请求,直接指向es目录
        RewriteCond %{REQUEST_URI} ^/es/
        RewriteRule ^es/(.*)$ es/$1 [L]
        # 根目录请求,内部指向en目录(默认英语)
        RewriteRule ^(.*)$ en/$1 [L]
    </Directory>
</VirtualHost>

配置规则说明

  • 重定向规则:强制/en/开头的请求跳转到根目录,用301永久重定向保证搜索引擎收录规范
  • 自动语言跳转:根据浏览器的Accept-Language头部,优先给西语用户跳转到/es/,其他用户默认留在根目录
  • 内部文件映射:用户访问根目录内容(比如/image.png)时,服务器实际从en/image.png读取;访问/es/image.png时,从es/image.png读取,解决静态文件加载问题

内容的提问来源于stack exchange,提问作者Anuj TBE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:35:29