Как использовать errordocument для перенаправления на php-файл в той же папке?

StackOverflow https://stackoverflow.com/questions/1668889

Вопрос

Я хочу принимать запросы на отсутствующие файлы в определенной папке и перенаправьте их на program.php в этой папке.

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

Я пробовал просто ставить:

errordocument 404 program.php

но в результате получается, что браузер просто выводит "program.php" и не выполняется program.php .

Я понимаю почему это происходит:основываясь на документации по адресу http://httpd.apache.org/docs/2.0/mod/core.html, URL-адреса, которые не начинаются с косой черты или http, интерпретируются как текстовое сообщение.

Вопрос в том, как обойти это ограничение, чтобы иметь возможность доступа к одной и той же папке.

Это было полезно?

Решение

В итоге я использовал rewriterule вместо errordocument:

rewriteengine on
rewritecond %{request_filename} !-f
rewriterule ^(.+).jpg$ program.php?i=$1.jpg [L]

Вторая строка проверяет, что файл не существует, так что существующие изображения будут показаны правильно.

Другие советы

Ты хочешь:

ErrorDocument 404 /program.php

В соответствии с Документы, "URL-адреса могут начинаться с косой черты (/) для локальных веб-путей (относительно DocumentRoot)".

Вы пробовали использовать (относительный или абсолютный) путь?Если вы сделаете его относительным, он должен быть привязан к веб-корню, который может служить сервером для вашей цели.

ErrorDocument 404 /program.php

Если у вас есть только небольшое количество папок, вы, вероятно, можете использовать:

<Directory /path/a>
   ErrorDocument 404 /a/program.php
</Directory>
<Directory /path/b>
   ErrorDocument 404 /b/program.php
</Directory> 
<Directory /path/c>
   ErrorDocument 404 /c/program.php
</Directory>

Если это непрактично, то у вас должен быть только один program.php в корневом каталоге и заставить его реагировать по-разному в зависимости от содержимого переменной окружения REDIRECT_URL, которая является $_SERVER['REDIRECT_URL'] в php.

Почему бы не использовать один ErrorDocument для обработки всех ошибок во всех папках?Так могло бы быть намного чище.Затем вы могли бы обработать отдельный случай, используя $_SERVER["REQUEST_URI"], который должен содержать исходный запрос, если я правильно помню.

Как насчет этого?В вашем корневом каталоге вы настраиваете общий файл error.php.Однако все, что он делает, это анализирует REQUEST_URI, проверяет путь, видит, есть ли там пользовательский error.php и включает это.Могло бы сработать, а?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top