Как доставить пользовательскую ошибку 404 из сценария perl? - PullRequest
1 голос
/ 27 октября 2011

У меня есть файл .htaccess, который вызывает Perl-скрипт, если выполняются определенные условия.Файл htaccess выглядит следующим образом:

Options +FollowSymlinks
ErrorDocument 404 /404.shtml

#check existence
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{PATH_INFO} (.*)

#redirect for codes
RewriteCond %{REQUEST_URI} !\.[css|jpg|gif|png]
RewriteRule ^(.*) /cgi-bin/normalized\.pl?code=$1 [R=301]

Коды передаются в файл normalized.pl, так что, если запрошенный URL-адрес был www.domain.com/code1, передается «code1».Если код существует, я могу направить пользователя далее на правильную страницу.

Однако, если код не существует, я хочу, чтобы пользователь был перенаправлен на мою пользовательскую страницу 404, как определено в файле htaccess.

Что, похоже, происходит, так это то, что файл htaccess видит нормализованный pl как существующий файл, и я получаю ответ 200 для сценария perl.Затем скрипт perl возвращает заголовок 404 (как показано ниже) , но он не показывает мою пользовательскую страницу 404 - только стандартную для браузера.

print header(-status=>'404 Not Found',-type=>'text/html');

Я подозреваю, что это потому, что файл .htaccess уже был передан к моменту запуска сценария perl.

Как мне убедить мой браузер отобразить пользовательскую страницу 404 в этом случае?Было бы целесообразно / приемлемо принудительно перенаправить 301 из сценария perl на страницу 404?Но окажет ли это какое-либо влияние на поисковые системы, индексирующие страницы?

1 Ответ

1 голос
/ 28 октября 2011

Заголовок 404, отправляемый вашим Perl-скриптом, только сообщает браузеру, что страница не найдена. Он не может сообщить об этом веб-серверу, поскольку веб-сервер считает запрос успешным из-за того, что он нашел ваш Perl-скрипт.

Единственный способ отправить свою пользовательскую страницу 404 в этот момент - это иметь скрипт Perl print для него HTML-код после заголовка 404.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...