Как использовать errordocument для перенаправления на php-файл в той же папке?
-
13-09-2019 - |
Вопрос
Я хочу принимать запросы на отсутствующие файлы в определенной папке и перенаправьте их на 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 и включает это.Могло бы сработать, а?