【问题标题】:Directory based error page redirection基于目录的错误页面重定向
【发布时间】:2016-01-12 10:11:33
【问题描述】:

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

我想为这些语言环境中的每一个实现不同的错误页面,但我不知道如何通过重定向/虚拟主机配置来实现。

我为每个目录阅读了不同的.htaccess 文件,但这不起作用。

帮助会很好。提前致谢。

【问题讨论】:

  • @anubhava:它们不是实际的物理目录,而是文件系统中其他文件的代理。
  • 还要告诉我你的 Apache 版本吗?
  • @anubhava Apache 2.2

标签: .htaccess mod-rewrite vhosts


【解决方案1】:

在 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 解决方案会将200 状态返回给客户端。

【讨论】:

    【解决方案2】:

    拥有不同的.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 文件,您可以使用DirectoryLocation 指令实现相同的目的。在您的主或虚拟主机配置中,这看起来像

    <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>
    

    &lt;Location&gt; 指令看起来很相似。

    【讨论】:

    • 使用 Location 指令的最终方法奏效了!谢谢@Olaf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2010-11-10
    • 2017-05-01
    • 1970-01-01
    • 2015-02-09
    相关资源
    最近更新 更多