У меня есть файл .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?Но окажет ли это какое-либо влияние на поисковые системы, индексирующие страницы?