Могу ли я заставить Apache искать кодировки URL как буквенные имена файлов, используя mod-rewrite? - PullRequest
0 голосов
/ 11 декабря 2011

Я имею дело со старым сайтом, на котором, к сожалению, иногда сохраняются изображения как

kitty%2Bcat.jpg (буквально с% 2B там)

но иногда как

kitty+cat.jpg

(один или другой, не оба будут существовать)

К сожалению, когда браузер делает запрос на kitty% 2Bcat.jpg, он никогда не пытается найти буквальное имя файла с этим - если существует kitty + cat.jpg, он будет обслуживать его, если нет - 404s

Могу ли я использовать некоторые правила переписывания модов, чтобы, если запрашивается kitty% 2Bcat.jpg, но не существует kitty + cat.jpg, а kitty% 2Bcat.jpg - Китти% 2Bcat.jpg обслуживается?

Я представляю себе некоторую логику, но некоторые кусочки все еще отсутствуют.

RewriteCond %{REQUEST_FILENAME} \%2B
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule . %{REQUEST_FILENAME} [L]

Видите - как я могу заставить Apache обслуживать его буквально, а не 404?

Возможно, apache на самом деле видит его как котенка + кошку и никогда не получает возможность проверить его как% 2B, так что я должен сделать что-то подобное?

RewriteCond %{REQUEST_FILENAME} \+
RewriteCond %{REQUEST_FILENAME} \.(jpg|gif|png)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\+(.*)$ $1\%2B$2 [L]

Но, к сожалению, этого недостаточно, поскольку может быть несколько% 2B и другие кодировки.

1 Ответ

1 голос
/ 11 декабря 2011

Попробуйте флаг [NE] No-Escape http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

так

RewriteCond %{REQUEST_FILENAME} !-f [NE]

Выстрел в темноте, кажется, что это может сработать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...