перенаправить в htaccess, чтобы заставить заглавные URL - PullRequest
1 голос
/ 04 февраля 2020

Мне нужно перенаправить все адреса на моем веб-сайте из нижнего регистра в верхний регистр и без знака sh в конце URL.

Например, я хочу изменить

example.com/aaa

К

example.com/AAA/

1 Ответ

0 голосов
/ 13 февраля 2020

Проще воспринимать это как две отдельные задачи / перенаправления:

  1. Преобразовать URL в верхний регистр.
  2. Добавить конечный sla sh, если не указан.

Мы, вероятно, должны быть осторожны, чтобы не преобразовывать запросы на фактические ресурсы файловой системы - разве это требование здесь?

К сожалению, если вы ограничены использованием .htaccess, тогда не существует простой директивы преобразовать строчные в прописные. Вам нужно перебрать URL, внутренне переписав каждую букву по мере необходимости. Затем вы можете выполнить одно перенаправление, когда закончите.

Добавьте следующее в начало вашего root .htaccess файла:

RewriteEngine On

# If the request "looks-like" a file (ie. has a file extension) then abort now...
RewriteRule \.\w{2,4}$ - [L]

# If there are lowercase letters, set HAS_LC to true and skip next rule
RewriteRule [a-z] - [E=HAS_LC:TRUE,S=1]

# Skip this entire section if no lowercase letters in requested URL
RewriteRule ![a-z] - [S=28]

# Replace single occurrence of letter, then process next Rule.
# DPI flag required if requesting multiple virtual path segments (ie. with path-info)
RewriteRule ([^a]*)a(.*) $1A$2 [DPI]
RewriteRule ([^b]*)b(.*) $1B$2 [DPI]
RewriteRule ([^c]*)c(.*) $1C$2 [DPI]
RewriteRule ([^d]*)d(.*) $1D$2 [DPI]
RewriteRule ([^e]*)e(.*) $1E$2 [DPI]
RewriteRule ([^f]*)f(.*) $1F$2 [DPI]
RewriteRule ([^g]*)g(.*) $1G$2 [DPI]
RewriteRule ([^h]*)h(.*) $1H$2 [DPI]
RewriteRule ([^i]*)i(.*) $1I$2 [DPI]
RewriteRule ([^j]*)j(.*) $1J$2 [DPI]
RewriteRule ([^k]*)k(.*) $1K$2 [DPI]
RewriteRule ([^l]*)l(.*) $1L$2 [DPI]
RewriteRule ([^m]*)m(.*) $1M$2 [DPI]
RewriteRule ([^n]*)n(.*) $1N$2 [DPI]
RewriteRule ([^o]*)o(.*) $1O$2 [DPI]
RewriteRule ([^p]*)p(.*) $1P$2 [DPI]
RewriteRule ([^q]*)q(.*) $1Q$2 [DPI]
RewriteRule ([^r]*)r(.*) $1R$2 [DPI]
RewriteRule ([^s]*)s(.*) $1S$2 [DPI]
RewriteRule ([^t]*)t(.*) $1T$2 [DPI]
RewriteRule ([^u]*)u(.*) $1U$2 [DPI]
RewriteRule ([^v]*)v(.*) $1V$2 [DPI]
RewriteRule ([^w]*)w(.*) $1W$2 [DPI]
RewriteRule ([^x]*)x(.*) $1X$2 [DPI]
RewriteRule ([^y]*)y(.*) $1Y$2 [DPI]
RewriteRule ([^z]*)z(.*) $1Z$2 [DPI]

# If there are any more lowercase letters, restart at very first RewriteRule in file.
# Set internal limit of 30 loops (requires Apache 2.4.8)
# Increase limit if you have more than 30 instances of any one letter in the URL. (eg. > 30 "a")
RewriteRule [a-z] - [N=30]

# If a conversion has occurred then issue an external redirect
RewriteCond %{ENV:HAS_LC} TRUE
RewriteRule (.*) /$1 [R=302,L]

# Append a trailing slash if omitted
# - Exclude any requests that "look-like" a static resource / actual file
RewriteCond %{REQUEST_URI} !/$
RewriteRule !\.\w{2,4}$ %{REQUEST_URI}/ [R=302,L]

Обратите внимание, что в идеале вы должны сначала протестировать с 302 (временные) перенаправления во избежание возможных проблем с кэшированием.

Решение от строчных до прописных основано на коде
https://www.askapache.com/htaccess/rewrite-uppercase-lowercase/

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