基于目录的错误页面重定向
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.htaml
和 error404.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
状态发送给客户端。
我的网站有两个本地化内容,即 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.htaml
和 error404.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
状态发送给客户端。