Php 在多语言网站中显示404页面
我为一个网站创建了一个Php 在多语言网站中显示404页面,php,Php,我为一个网站创建了一个404.php页面。此外,还有.htaccess文件(在/root中),其中包含ErrorDocument 404/404.php行 该网站具有多语言功能,如下所示: sitename.com/it/article1 sitename.com/en/article1 等等。。。文章很多 当我试图访问类似于sitename.com/adsdasaerra的内容时,404.php页面会出现,但当我试图访问sitename.com/en/adsdasaerra时,adsda
404.php
页面。此外,还有.htaccess
文件(在/root中),其中包含ErrorDocument 404/404.php
行
该网站具有多语言功能,如下所示:
sitename.com/it/article1
sitename.com/en/article1
等等。。。文章很多
当我试图访问类似于sitename.com/adsdasaerra
的内容时,404.php
页面会出现,但当我试图访问sitename.com/en/adsdasaerra
时,adsdasaerra
显然不是一篇现有的文章
我怎样才能做到这一点呢?你有没有试着给它一个完整的路径
ex ErrorDocument 404 /site/error/404.html
它不会将您重定向到404.php文件,因为您访问了现有文件。看看这个网址 sitename.com/en/adsdasaerra “adsdasaerra”可能只是一个由htaccess重写的参数值。这不是文件。我想您有一个“en”文件夹和index.php。因此,当您在上面输入url时,您可以使用参数“adsdasaerra”访问“en”文件夹中的index.php,这就是您没有得到404错误的原因。您可以通过添加一些代码来解决这个问题,这些代码通过数据库搜索“adsdasaerra”,如果它不存在,则在代码中手动将其重定向到404.php文件 您在这个url上获得404.php的原因 sitename.com/adsdasaerra 是因为您没有名为“adsdasaerra”的文件
希望它能对您有所帮助:)您是否尝试将行
ErrorDocument 404/404.php
放入apache全局配置文件中,可能在/etc/httpd/中。
或者somesite.com/en/文件夹下是否存在现有的.htaccess文件?如何归档多语言功能?在apache或.htaccess中重写?你的PHP代码是什么
除了BranimirĐureks的答案外,您还可以分析
$\u服务器['REQUEST_URI']
字符串,即使用explode()
,如果文章不存在于所选语言中,则发送标题(“HTTP/1.0 404未找到”)代码>否则显示文章。如果您未使用CMS等,因此语言文件夹确实存在,您可以使用以下方法:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(ie|en|de)/ /404.php/$1 [R=404,L]
解释
- 这三个条件检查请求的文件或文件夹是否不存在
- 规则检查请求的url是否以三个国家中的一个开始,然后是a/,并将国家代码捕获到组1
- 它重定向到
/404.php?lang=$1
,例如带有404代码的/404.php?lang=en
在404.php中,您只需要使用$\u GET['lang']
来获取请求的语言
但是您已经说过,多语言功能是在.htaccess中归档的。知道那个档案里有什么会很有帮助的
无论如何:如果所有请求都被重定向到一个页面(例如index.php),那么该文件中的某个部分就会包含站点的内容。它要么包含或类似于文件,要么查询数据库。
这就是您需要扩展代码的要点。如果找不到该文件或数据库中没有记录,则需要包含404文件。请使用.htaccess底部的代码。用您的路径替换路径
RewriteRule ^pagenotfound$ 404.html
ErrorDocument 404 path/pagenotfound
重写规则^pagenotfound$404.html
错误文档404路径/页面未找到
应该可以在htaccess
文件中定义这样的ErrorDocument
ErrorDocument 404 http://sitename.com/404.php
然后对404.php
文件中的请求执行特定于语言的重定向检查。理想情况下,您会有一个错误404文档页面。在该页面上,您首先将默认区域设置为en,然后确定用户使用的浏览器区域设置/语言,然后继续下一步,即以该语言显示错误页面
因为我们谈论的是PHP,下面是一个如何在PHP中检测语言环境的答案。
从这里开始,下一步基本上是使用数组或文件中与该区域设置相关联的字符串并显示它们
在这个页面上,您还可以有一些链接到其他可以查看的翻译(单击时显示div的隐藏元素),如果用户不希望阅读其浏览器设置为使用的语言中的错误。我确实希望该站点包含的所有语言部分都显示相同的404.php。您是否使用CMS或类似工具?背景是:文件夹en/
&it/
是否真的存在,或者它们只是我没有尝试的处理页面的参数。某个文件夹下没有另一个.htaccess文件,仅在根目录下。多语言功能在.htaccess中存档。因此,$\u服务器的分析['REQUEST\u URI']应该在.htaccess文件中?请给出一个.htaccess的例子好吗?我猜在index.php中会有类似于将sitename.com/en/重写为sitename.com/index.php?lang=en的内容,您可以分析$\u服务器['REQUEST\u URI'],以确定该文章是否存在。。。或者,如果你在重写中直接获得文章名,你不需要REQUEST_URI,你可以直接检查它…你能给我一个小例子,在数据库中搜索相应的文件并重定向到404.php吗?好的,我需要更多关于你的网站如何工作的信息,但我会尝试一下。因此,如果您在“en”文件夹中有index.php,它从URL参数中获取标题,在本例中为“adsdasaerra”,它可能是文章的标题,那么您可以在数据库中搜索该标题。如果你找不到它,那么将它重定向到404.php。起初我想知道你为什么被否决,因为我认为你是对的。但随后您开始使用index.php
将adsdasaerra
作为参数。虽然您很快提到了由htaccess重写的,但如果您有