我为网站创建了一个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
显然不是现有文章。
我怎样才能做到这一点?
答案 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]
解释
/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;的文件。
希望它会对你有所帮助:)。