Преобразовать в нижний регистр в правиле mod_rewrite - PullRequest
13 голосов
/ 27 мая 2010

Я бы хотел, чтобы URL-адреса, такие как server.com/foo, не учитывали регистр. Но server.com/foo фактически возвращает mod_rewrite'd на server.com/somedir/foo

(Предположим, что все файлы в "somedir" строчные.)

Итак, вопрос в том, как выполнить mod_rewrite следующим образом:

RewriteRule  ^([^/]+)/?$  somedir/convert_to_lowercase($1)

PS: Вот удобная шпаргалка mod_rewrite - http://dreev.es/modrewrite - хотя она не может ответить на этот конкретный вопрос.

PPS: благодаря Bee а также Игнасио за всю помощь с этим. Кроме того, вот связанный вопрос: Активация RewriteMap

Ответы [ 3 ]

16 голосов
/ 27 мая 2010

Сначала поместите следующую строку в раздел <VirtualHost> вашего файла .conf. (Для меня, который живет в /etc/httpd/vhosts.d/00foo.conf.)

RewriteMap lc int:tolower 

Вы можете заменить lc на любое имя. Затем перезапустите apache, что вы можете сделать с помощью sudo service httpd restart.

Наконец, добавьте это в ваш файл .htaccess:

RewriteRule ^/(.*)$ /${lc:$1} 
12 голосов
/ 27 мая 2010
RewriteMap tolower int:tolower
RewriteRule  ^([^/]+)/?$  somedir/${tolower:$1}
2 голосов
/ 24 июля 2013

Я бы сделал переадресацию 301, а не перезапись URL, для целей SEO:

...