Выполненные PHP кодируют от .htaccess?

Мне не удалось заставить работать другие решения, но я смог использовать 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');
}
7
задан JD Isaacks 24 June 2009 в 15:00
поделиться

4 ответа

Существует нечто, называемое RewriteMap .

Вы можете вызвать исполняемый сценарий, который вернет URL-адрес для перезаписи.

Дополнительную информацию и примеры можно найти в этой статье (на Perl, но полностью применимы к любому другому языку):

http: / /www.onlamp.com/pub/a/apache/2005/04/28/apacheckbk.html

Резюме предостережений:

  • Необходимо запустить цикл чтения STDIN (т. е. не выходить после получения URL)
  • Необходимо напечатать URL-адрес для перезаписи на С завершающим символом новой строки
  • Должен быть доступен для чтения и выполнения пользователем. Apache запускается как

Это способ создания карты

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");
?>
11
ответ дан 6 December 2019 в 10:52
поделиться

Да; вам понадобится RewriteMap из разновидности внешней программы перезаписи.

3
ответ дан 6 December 2019 в 10:52
поделиться

Я бы передал URL-адрес на страницу PHP, а затем выполнил окончательное перенаправление с помощью параметра заголовков PHP.

header("Location: new-page.php");

Если вы не хотите, чтобы перенаправление выполнялось, вы также можете включить нужную страницу. Я считаю, что это немного более гибко, чем использование RewriteMap.

Надеюсь, это поможет!

2
ответ дан 6 December 2019 в 10:52
поделиться

Обратите внимание, что директива RewriteMap может использоваться только в конфигурации сервера или виртуального хоста ] контекст .

2
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: