2016-11-04 4 views
2

Добрый день, всем, у меня возникла небольшая проблема, которая вызывает конфликт на моем сайте. когда я, например, на этой странице/ru/pagenotexists/как я могу просто ссылаться на /en/404.php? Я использую следующую директиву в моей .htaccess:ErrorDocument 404 для многоязычного сайта

ErrorDocument 404 /404.php 

Я попытался это решение, но ничего не работает:/

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^([a-z]{2})/ /$1/404.php [R=404,L] 

Спасибо большое за помощь

+0

Что сервер сделать когда вы запрашиваете **/en/pagenotexists/**? – starkeen

+0

благодарит за сообщение. Скажем, язык по умолчанию «fr», если я запрашиваю «/ en/pagenotexists /», страница будет загружаться на французском языке, и я бы хотел, чтобы она отображалась на английском языке. – Websphere

+0

Вы имеете в виду «если вы попросите **/en/notexist ** он должен загружать **/en/404.php ** и **/fr/notexist ** должен загружать **/fr/404.php **? – starkeen

ответ

0

Чтобы показать содержание Ланг конкретных 404.php с правильным кодом 404 статуса вы можете использовать это внутреннее переписывают правило:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-z]{2})/ $1/404.php [L] 

Тогда есть ваш /en/404.php как это:

<?php 
// return correct 404 status code 
http_response_code(404); 

// rest of the 404 handler content 
?> 
+1

О, круто, я попробую :) ты имел в виду пропустить ведущую косую черту? до $ 1? Спасибо – Websphere

+0

Вы можете поставить ведущую косую черту перед '$ 1', но это не будет иметь никакого значения, если .htaccess находится в корне сайта. – anubhava

+1

да, это сработало хорошо, спасибо :), но я столкнулся с другой связанной проблемой, я постараюсь ее решить, и я сообщу, если мне это не удастся;) – Websphere

0

Вам необходимо удалить R = 404:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^([a-z]{2})/ /$1/404.php [R,L] 

В противном случае правило будет перенаправлять запрос на страницу 404 по умолчанию вместо назначения правила.

+0

что вы дал мне работу, но она работает с этой директивой: «RewriteRule^([az] {2})/$ 1/error-404/[QSA, L]' (удаление косой черты и использование QSL)! Но если я удалю R = 404, я не допущу, чтобы apache отправил заголовки 404, правильно? – Websphere

+0

Да, это правда. Вы не сможете получить заголовок 404, но вместо этого вы получите ответ 302. – starkeen

+0

И не имеет значения не получать 404 заголовка? :) – Websphere