基于目录的错误页面重定向

Directory based error page redirection

我的网站有两个本地化内容,即 EN 和 FR,内容将通过 URL 呈现:http://www.example.com/en/http://www.example.com/fr/

我想为每个语言环境实现不同的错误页面,但我不知道如何通过 redirect/virtual 主机配置实现。

我读到每个目录都有不同的 .htaccess 文件,但这没有用。

帮助会很好。提前致谢。

具有不同的 .htaccess 效果很好,例如

/-+- en -- .htaccess
  |
  +- fr -- .htaccess

并且在 /en/.htaccess 中,您有

ErrorDocument 404 /path/to/en/error404.html

/fr/.htaccess

相同
ErrorDocument 404 /path/to/fr/error404.html

也可以将错误文档放在同一目录下,通过扩展名区分,例如error404.en.htamlerror404.fr.html。然后你

ErrorDocument 404 /path/to/error404.en.html

ErrorDocument 404 /path/to/error404.fr.html

分别


如果您不想使用 .htaccess 文件,您可以使用 Directory or Location 指令实现相同的目的。在您的主要或虚拟主机配置中,这看起来像

<Directory "/path/to/example.com/en">
    ErrorDocument 404 /path/to/error404.en.html
</Directory>

<Directory "/path/to/example.com/fr">
    ErrorDocument 404 /path/to/error404.fr.html
</Directory>

<Location> 指令看起来很相似。

在 Apache 2.4 上,您可以使用表达式:

# for /fr/ URIs
<If "%{REQUEST_URI} =~ m#^/fr/#">
   ErrorDocument 404 /fr-404.html
</If>

# for /en/ URIs
<If "%{REQUEST_URI} =~ m#^/en/#">
   ErrorDocument 404 /en-404.html
</If>

Check Apache 2.4 expression reference.

如果您仍然坚持使用 Apache 2.2,那么您可以使用:

RewriteEngine On

# for /fr/ URIs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^fr/ /fr-404.html [L]

# for /en/ URIs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^en/ /en-404.html [L]

但是请记住,Apache 2.2 解决方案将 return 200 状态发送给客户端。