Apache - Перенаправить 301 PDF в PDF с пробелами (двоичный файл) - PullRequest
2 голосов
/ 05 октября 2009

Что я хочу:

На 301 перенаправить /file_new.pdf на / file new.pdf (% 20, то есть расстояние между файл и новый)

Я знаю, что:

  • Я могу положиться на RewriteRule 301, который использует mod_rewrite, используя решение из этой темы: @ mod_rewrite с пробелами в URL
  • Я могу переименовать файл, чтобы в нем не было пробелов, и заменить его на дефисы / подчеркивания

Однако мне лично любопытно, как можно это сделать. Вот что у меня есть:

Redirect 301 /file_new.pdf http://sitename.com/file\ new.pdf

При вызове configtest парсер conf-файла выдает ошибку:

Перенаправление принимает два или три аргумента, необязательный статус, затем документ быть перенаправлен и целевой URL

Редактировать: По-видимому, методы mod_rewrite или Redirect 301 работают для меня, возможно потому, что по какой-то причине они не применяются, поскольку файл действительно существует в этом месте.

<VirtualHost *:80>
DocumentRoot /www/sitename_com
ServerName site.local
Options -MultiViews

RewriteEngine on
Redirect 301 /pdf/file_new.pdf http://site.local/pdf/file%20new.pdf
RewriteRule ^/pdf/file_new.pdf http://site.local/pdf/file\ new.pdf
RewriteLog "/www/rewrite.log"
</VirtualHost>

В rewrite.log он пытается сопоставить шаблон с каждым соответствующим запросом uri / http.

Таким образом, чтобы подвести итог, он идет прямо к файлу file_new.pdf в браузере, а не 301. Я уверен, что alias и rewrite включены. Моя версия apache 2.2.

1 Ответ

5 голосов
/ 06 октября 2009

Redirect на самом деле является частью mod_alias, а не mod_rewrite. Я рад, что% 20 сработал, и вы также можете использовать кавычки, чтобы сообщить apache, что путь, включающий пробел, - это URL-адрес для перенаправления, а не два отдельных элемента:

Redirect 301 /pdf/file_new.pdf "http://site.local/pdf/file new.pdf"
...