2016-07-25 4 views
1

У меня есть сайт на двух языках, английский и голландский.Пользовательская страница 404 для многоязычного (многоязычного) сайта, созданного на PHP

Английская версия находится в корне (public_html), а голландская версия находится в каталоге/nl /.

Мой сайт построен на PHP.

Когда ссылка сломана (страница перемещена или больше не существует), я хочу, чтобы голландские говорящие люди (голландцы и бельгия) были перенаправлены на страницу 404 на голландском языке, а остальные на страницу 404 на английском языке ,

Как создать пользовательскую страницу 404 Error для этого многоязычного (многоязычного) веб-сайта? Пожалуйста, дайте мне полный код, например (php и/или .htaccess).

Мой .htacces файл содержит следующие строки:

# Instructs webbrowsers how to cache content 
 
<IfModule mod_expires.c> 
 
ExpiresActive On 
 
ExpiresByType image/jpg "access 1 year" 
 
ExpiresByType image/jpeg "access 1 year" 
 
ExpiresByType image/gif "access 1 year" 
 
ExpiresByType image/png "access 1 year" 
 
ExpiresByType text/css "access 1 month" 
 
ExpiresByType text/html "access 5 minutes" 
 
ExpiresByType application/pdf "access 1 month" 
 
ExpiresByType text/x-javascript "access 1 month" 
 
ExpiresByType application/x-shockwave-flash "access 1 month" 
 
ExpiresByType image/x-icon "access 1 year" 
 
ExpiresDefault "access 1 month" 
 
</IfModule> 
 

 
# Rewrite non-www to www 
 
RewriteEngine On 
 
RewriteCond %{HTTP_HOST} !^www\. 
 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 
 

 
RewriteEngine on 
 
RewriteRule ^(.*)\.html$ $1.php [nc] 
 

 
# Error Page(s) 
 
ErrorDocument 404 /404.php

ответ

2

Вы можете использовать это в .htaccess:

страница ошибки
ErrorDocument 404 /error_en.html 

<If "%{REQUEST_URI} =~ /nl\x2F.*/"> 
    ErrorDocument 404 /error_nl.html 
</If> 

по умолчанию будет в error_en.html, и если кто-то попытается получить доступ к странице, которая не существует в каталоге /nl/ - он получит содержимое страницы error_nl.html.

Убедитесь, что как error_en.html и error_nl.html файлов существует в корневой директории.

Обратите внимание на использование \x2F внутри регулярного выражения вместо / полукокса, что вы не можете избежать внутри регулярных выражений.

+0

Не работает. Когда я ввожу неправильный url вне каталога/nl /, он показывает версию error_nl.html. Он всегда показывает версию nl. – Mickel

+0

В файле '.htaccess' содержится больше строк? Можете ли вы поместить его в какой-нибудь пастебин? Какую версию Apache вы используете? раствор был испытан в Apache 2.4.9 – Dekel

+0

когда я бегу он показывает следующую информацию: Apache 1.3 (apache_hooks) \t Apache 1.3 \t Apache 2.0 Фильтр \t Apache 2.0 Обработчик (на основе на код фильтра Apache 2.0) – Mickel

0

Вы можете перенаправить ошибку.html, чтобы отобразить страницу, сгенерированную PHP-файлом, который вы можете генерировать многоязычный вывод.

ErrorDocument 404 /error.html 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^error\.html$ error.php [NC,R] 

но файл error.html не должен существовать на сервере, вместо этого он будет показан пользователю.