У меня есть веб-сайт, который будет иметь миллионы страниц в каталоге. Я хотел бы хранить эти файлы на диске в кучке подкаталогов на основе первых символов имени страницы.RewriteRule для хранения тысяч файлов в подкаталогах
Например http://mysite.com/hugedir/somefile.html
будет храниться в /var/www/html/hugedir/s/o/m/e/f/ile.html
То есть достаточно тривиально сделать с RewriteRule следующим образом:
RewriteRule ^hugedir/(.)(.)(.)(.)(.)(.*).html /hugedir/{$1}/{$2}/{$3}/{$4}/{$5}/$6.html
RewriteRule ^hugedir/(.)(.)(.)(.)(.*).html /hugedir/{$1}/{$2}/{$3}/{$4}/{$5}.html
RewriteRule ^hugedir/(.)(.)(.)(.*).html /hugedir/{$1}/{$2}/{$3}/{$4}.html
RewriteRule ^hugedir/(.)(.)(.*).html /hugedir/{$1}/{$2}/{$3}.html
RewriteRule ^hugedir/(.)(.*).html /hugedir/{$1}/{$2}.html
RewriteRule ^hugedir/(.*).html /hugedir/{$1}.html
Однако, имя файла может содержать дефисы или другие нестандартные символы и я бы действительно бы избежать каталог с именем странным характером. В идеале, я хотел бы иметь список «одобренных» символов и исключать или преобразовывать неутвержденные символы в символ подчеркивания.
Может ли кто-нибудь подумать о способе сделать это? Или что-то еще эквивалентное? Часть требования состоит в том, что они являются физическими файлами на диске и не анализируются языком сценариев.
Collissions не будет проблемой, если первые символы (убежали) используются для создания каталогов , но они также хранятся в имени файла. Например, RewriteRule^hugedir /(.)(.)(.*). Html /hugedir/{$1}/{$2}/{$1}{$2}{$3}.html – leonbloy
А, очень умный. Я не думал об этом. –
Это переписываниеМарка кажется многообещающим, но «побег» не производит шестнадцатеричное кодирование? (например, $ =>% 25) – leonbloy