Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 基于目录的错误页重定向_.htaccess_Mod Rewrite_Vhosts - Fatal编程技术网

.htaccess 基于目录的错误页重定向

.htaccess 基于目录的错误页重定向,.htaccess,mod-rewrite,vhosts,.htaccess,Mod Rewrite,Vhosts,我的网站有两个本地化内容,即EN和FR,内容将通过URL呈现:http://www.example.com/en/和http://www.example.com/fr/ 我想为每个区域设置实现不同的错误页面,但我不知道如何通过重定向/虚拟主机配置实现 我了解到每个目录都有不同的.htaccess文件,但这不起作用 帮助会很好。提前感谢。拥有不同的。htaccess非常有效,例如 /-+- en -- .htaccess | +- fr -- .htaccess 在/en/.htacce

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

我想为每个区域设置实现不同的错误页面,但我不知道如何通过重定向/虚拟主机配置实现

我了解到每个目录都有不同的
.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

分别


如果不想使用
.htaccess
文件,可以使用或指令实现相同的功能。在主主机或虚拟主机配置中,如下所示

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

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

指令看起来类似。

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

但是请记住,Apache 2.2解决方案将向客户端返回
200
状态。

@anubhava:它们不是实际的物理目录,而是文件系统中其他文件的代理。还要告诉我您的Apache版本吗?@anubhava Apache 2.2使用Location指令的最终方法有效!谢谢@Olaf
# 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>
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]