Назад | Перейти на главную страницу

Как обслуживать wget - зеркало каталога файлов со знаками вопроса в них

Я пытаюсь создать статическое зеркало приложения php (в частности, старой установки галереи php). Приложение создает такие URL-адреса, как:

view_album.php?set_albumName=MyAlbum

wget загружает их непосредственно в файлы с одинаковыми именами, снабженные вопросительными знаками. Чтобы не нарушать входящие ссылки, я хотел бы сохранить эти имена. Но как мне их обслужить? У меня две проблемы:

  1. Веб-серверы (правильно) пытаются найти "view_album.php" и передать ему аргументы запроса, а не найти файл с вопросительным знаком. Как мне указать веб-серверу искать файлы со знаком вопроса? Переименование файлов нежелательно, так как это нарушит входящие ссылки. Я не могу указать входящим линкерам% -кодировать свои URL-адреса.

  2. Файлы не заканчиваются на HTML, поэтому большинство веб-серверов не будут отправлять заголовок типа содержимого html. Какие параметры конфигурации я должен искать, чтобы указать ему, чтобы он принудительно использовал тип содержимого «text / html» для всех файлов в каталоге или соответствовал определенному шаблону?

В конечном итоге я использую lighttpd, но если вы знаете, какая конфигурация может дать желаемый результат с apache / nginx, я бы тоже хотел это услышать.

wget загружает их прямо в файлы с одинаковыми именами, но с вопросительными знаками.

Вы можете отключить это поведение с помощью --restrict-file-names=ascii,windows, это решит вашу проблему прямо в wget, без необходимости использования сложных конфигураций сервера.

Думаю, это тоже можно исправить, изменив способ wget загружает файлы php:

wget -r --adjust-extension --convert-links 'http://example.com/index.php?foo=bar'

Вариант --adjust-extension делает wget сохраните файлы PHP с .html расширение, например index.php?foo=bar.html

Вариант --convert-links делает wget преобразовать ссылки в загруженных файлах во вновь созданные файлы .html. Обратите внимание, что это преобразование происходит после все файлы скачаны.

Смотрите также: http://fvue.nl/wiki/Wget_storing_files_with_question_marks

Я думаю ты можешь использовать mod_rewrite в Apache для этого. В идеале, если вы скажете mod_rewrite сделать что выглядит подобно бесполезной перезаписи, вы можете обмануть его, заставив думать, что он должен обслуживать файл, имя которого включает строку запроса. Поместите что-то подобное в конфигурацию вашего сервера (к сожалению, не в .htaccess или <Directory> блок)

RewriteEngine on
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*) /path/to/webdir/$1?%1

Я не знаю, что это будет делать с URL-адресами с несколькими вопросительными знаками. Я думаю, что он также добавит вопросительный знак к URL-адресам без строки запроса. Вы можете изменить первое регулярное выражение на (.+), но тогда он убирает вопросительный знак с URL-адресов с пустой строкой запроса.

Если это не сработает, вы можете переименовать файлы в какое-либо имя без вопросительных знаков (например, изменить их все на% s или что-то в этом роде) и использовать:

RewriteEngine on
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*) /path/to/webdir/$1\%%1

Я не знаю, как это связано с PATH_INFO. Если Галерея его использует, вам, возможно, потребуется добавить что-то вроде

RewriteCond %{PATH_INFO} (.*)
RewriteRule ^(.*) /path/to/webdir/$1/%1

(Но тогда возник бы конфликт, если бы Галерея использовала оба "http: //.../index.php" и "http: //.../index.php/foobar", поскольку index.php в файловой системе не может быть одновременно файлом и каталогом. Вы можете обойти это, если еще немного измените имена.)

Пока мы добавляем кучу mod_rewrite, можно также использовать ее для установки типов MIME:

RewriteRule \.php - [T=text/html]

или

RewriteCond %{REQUEST_FILENAME} \.jpg$
RewriteRule ^ - [T=image/jpeg]

или что-то подобное. (Обратите внимание, как первый сломается, если название альбома или фотографии содержит ".php" и т. Д.)

Дайте нам знать, как это получается!