Как я могу перенаправить каталог с помощью htaccess, включая файлы с пробелами в именах

Я имею дело с ситуацией, когда кто-то вручил мне кучу старых файлов на сервере, которые уже имеют множество входящих ссылок непосредственно на них (в основном PDF-файлы). Теперь я организовал файлы, но в другом каталоге. Если раньше это было "домен / руководства / файл", то теперь это "домен / медиа / руководство / файл". Я пытаюсь решить эту проблему с помощью файла htaccess.

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

redirect 301 "/manuals/file 123.pdf" "http://www.domain.com/manuals/file 123.pdf"

Тем не менее, существует множество этих файлов, и я подумал, есть ли способ создать регулярное выражение, которое будет обрабатывать пробелы в именах файлов, которые я мог бы использовать для перенаправления всего каталога. Я должен добавить, что некоторые файлы содержат приличные имена файлов без пробелов, некоторые имеют один пробел, а другие более одного пробела. Это не красиво.

Если вы столкнулись с этой проблемой до того, как я буду признателен за ваши советы, у меня заканчиваются идеи.

Благодарю.

3 ответа

Как насчет:

RedirectMatch permanent ^/manuals/(.*)$ http://www.domain.com/media/manual/$1

(.*) соответствует любому символу после /manuals/ в URL.

Примечание: Redirect а также RedirectMatch являются частью mod_aliasне mod_rewrite (так как вопрос был помечен) так что простите раньше mod_rewrite Правило я разместил.

Redirect может работать сразу с целыми каталогами.

Redirect permanent /manuals/ http://www.domain.com/manuals/

Тогда вам не нужно беспокоиться о выходе из %20или любой другой персонаж. Apache перенаправит каждый файл по этому пути в тот же файл под целевым URL.

(RedirectMatch существует также для сопоставления регулярных выражений; вам не нужно прибегать к этому для этого, хотя.)

Если вам нужны символы для пробелов в URL, вы можете использовать %20 который является кодировкой URL пробела.

Другие вопросы по тегам