在多语言网站中显示404页面

时间:2015-01-21 06:42:57

标签: php

我为网站创建了一个404.php页面。此外,.htaccess文件(在/ root中)有ErrorDocument 404 /404.php行。

该网站具有多语言功能,如下所示:

sitename.com/it/article1 
sitename.com/en/article1 

等等......有很多文章。

我尝试访问404.php之类的内容时会显示sitename.com/adsdasaerera页面,但在我尝试访问sitename.com/en/adsdasaerera时却不会显示, adsdasaerera显然不是现有文章。

我怎样才能做到这一点?

8 个答案:

答案 0 :(得分:2)

理想情况下,您会有一个错误404文档页面。在该页面上,您将首先设置en的默认语言环境,然后确定他们正在使用的用户浏览器语言环境/语言,然后继续执行下一步,即以该语言显示错误页面。

由于我们正在讨论PHP,这里是一个如何在PHP中检测语言环境的答案。 Simplest way to detect client locale in PHP

从那里开始,下一步基本上是使用与数组或文件相关联的字符串并显示它们。

在此页面上,如果用户不希望以浏览器设置使用的语言读取错误,您还可以获得一些指向可以查看的其他翻译的链接(显示点击div的隐藏元素)。

答案 1 :(得分:0)

你试过给它一个完整的路径吗?

ex ErrorDocument 404 /site/error/404.html

答案 2 :(得分:0)

您是否尝试将行ErrorDocument 404 /404.php放入apache全局配置文件中,可能在/ etc / httpd /中。 或者在somesite.com/en/文件夹下是否有一个ex.ttaccess文件?

答案 3 :(得分:0)

你如何实现多语言功能?在apache或.htaccess中重写?你的PHP代码是什么?

除了BranimirĐureks的回答,您可以分析$_SERVER['REQUEST_URI']字符串,即使用explode(),如果文章在选择的语言中不存在,请发送header("HTTP/1.0 404 Not Found");否则显示文章

答案 4 :(得分:0)

如果你使用CMS等,那么语言文件夹确实存在,你可以使用它:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(ie|en|de)/ /404.php/$1 [R=404,L]

解释

  • 这三个条件检查所请求的文件或文件夹是否不存在
  • 规则会检查请求的网址是从三个国家/地区中的一个开始,然后是/,将国家/地区代码捕获到第1组
  • 重定向到/404.php?lang=$1,例如/404.php?lang=en带有404代码

在那个404.php中,您只需要使用$_GET['lang']来获取请求的Langugage。


但是您已经说过,多语言功能在 .htaccess 中得以实现。知道该档案中的内容会有所帮助。

无论如何:如果所有请求都被重定向到一个页面(例如index.php),则该文件中的某些内容将包含该站点的内容。这可能是一个包含或类似的文件或对数据库的查询。 这就是你需要扩展代码的重点。如果找不到该文件或数据库中没有记录,则需要包含404文件。

答案 5 :(得分:0)

请在.htaccess的底部使用此代码。用您的路径替换路径。

RewriteRule ^pagenotfound$ 404.html
ErrorDocument 404 path/pagenotfound

答案 6 :(得分:0)

应该可以在ErrorDocument文件中定义htaccess这样的内容:

ErrorDocument 404 http://sitename.com/404.php

然后针对404.php文件中的请求执行特定语言的重定向检查。

答案 7 :(得分:-1)

它没有将您重定向到404.php文件,因为您访问了现有文件。看看这个网址

<强> sitename.com/en/adsdasaerera

&#34; adsdasaerera&#34;可能只是一个由htaccess重写的参数值。它不是文件。我想你有一个&#34; en&#34;文件夹和index.php。因此,当您输入上面的url时,您可以访问&#34; en&#34;中的index.php。带参数的文件夹&#34; adsdasaerera&#34;这就是为什么你不会得到404错误的原因。您可以通过添加少量代码来解决这个问题,该代码通过数据库搜索&#34; adsdasaerera&#34;如果它不存在,请在您的代码中手动将其重定向到404.php文件。

你在这个网址上获得404.php的原因

<强> sitename.com/adsdasaerera

是因为您没有名为&#34; adsdasaerera&#34;的文件。

希望它会对你有所帮助:)。