Мне не удалось заставить работать другие решения, но я смог использовать wget:
$tempDir = '/download/file/here';
$finalDir = '/keep/file/here';
$imageUrl = 'http://www.example.com/image.jpg';
exec("cd $tempDir && wget --quiet $imageUrl");
if (!file_exists("$tempDir/image.jpg")) {
throw new Exception('Failed while trying to download image');
}
if (rename("$tempDir/image.jpg", "$finalDir/new-image-name.jpg") === false) {
throw new Exception('Failed while trying to move image file from temp dir to final dir');
}
Существует нечто, называемое RewriteMap .
Вы можете вызвать исполняемый сценарий, который вернет URL-адрес для перезаписи.
Дополнительную информацию и примеры можно найти в этой статье (на Perl, но полностью применимы к любому другому языку):
http: / /www.onlamp.com/pub/a/apache/2005/04/28/apacheckbk.html
Резюме предостережений:
Это способ создания карты
RewriteMap fixurl prg:/usr/local/scripts/fixit.php
И теперь мы можем использовать его в RewriteRule:
RewriteEngine On
RewriteRule (.*) ${fixurl:$1}
РЕДАКТИРОВАТЬ: о внутренней ошибке сервера. Наиболее вероятная причина - то, что упоминает Гамбо, к сожалению, RewriteMap нельзя использовать в .htaccess. Вы можете использовать его в RewriteRule в .htaccess, но можете создать его только в конфигурации сервера или конфигурации виртуального хоста. Чтобы быть уверенным, проверьте журнал ошибок.
Итак, единственное решение PHP / .htaccess - это переписать все в определенную программу PHP, которая выполняет проверку и перенаправляет с использованием заголовка Location. Что-то вроде:
RewriteRule (.*) proxy.php?args=$1 [QSA]
Затем в proxy.php
<?php
$url = get_proper_destination($QUERY_STRING); #args will have the URI path,
#and, via QSA you will have
#the original query string
header("Location: $url");
?>
Да; вам понадобится RewriteMap из разновидности внешней программы перезаписи.
Я бы передал URL-адрес на страницу PHP, а затем выполнил окончательное перенаправление с помощью параметра заголовков PHP.
header("Location: new-page.php");
Если вы не хотите, чтобы перенаправление выполнялось, вы также можете включить нужную страницу. Я считаю, что это немного более гибко, чем использование RewriteMap.
Надеюсь, это поможет!
Обратите внимание, что директива RewriteMap
может использоваться только в конфигурации сервера или виртуального хоста ] контекст .