Я пытаюсь создать статическое зеркало приложения php (в частности, старой установки галереи php). Приложение создает такие URL-адреса, как:
view_album.php?set_albumName=MyAlbum
wget
загружает их непосредственно в файлы с одинаковыми именами, снабженные вопросительными знаками. Чтобы не нарушать входящие ссылки, я хотел бы сохранить эти имена. Но как мне их обслужить? У меня две проблемы:
Веб-серверы (правильно) пытаются найти "view_album.php" и передать ему аргументы запроса, а не найти файл с вопросительным знаком. Как мне указать веб-серверу искать файлы со знаком вопроса? Переименование файлов нежелательно, так как это нарушит входящие ссылки. Я не могу указать входящим линкерам% -кодировать свои URL-адреса.
Файлы не заканчиваются на 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" и т. Д.)
Дайте нам знать, как это получается!