Нечувствительные к регистру URL с mod_rewrite

Я хотел бы за любой URL, который не поражает существующий файл, чтобы сделать поиск на других возможных случаях и видеть, существуют ли те файлы, и если так, 302 им.

Если это не возможно, то я соглашаюсь с этими компромиссами:

  • Только проверьте строчную версию
  • Только проверьте первую часть пути

Например, http://example.com/CoOl/PaTH/CaMELcaSE должен перенаправить на http://example.com/cool/path/camelCase (предполагающий, что последний существует).

но конечно полное решение намного более полезно для меня и других

16
задан Paul Tarjan 4 January 2010 в 08:44
поделиться

3 ответа

CheckSpelling on

Соответствует файлам и каталогам. Подробности см. В документации .

20
ответ дан 30 November 2019 в 21:45
поделиться

Посмотрите на модуль Apache mod_negotiation. Он делает именно то, что вы хотите: http://httpd.apache.org/docs/2.0/mod/mod_negotiation.html#multiviews

Вы также можете объединить все запросы в один PHP-файл и позволить PHP-файлу сделать проверку за вас.

.
0
ответ дан 30 November 2019 в 21:45
поделиться

У меня нет под рукой Apache для тестирования, но некоторая комбинация этих правил должна делать то, что вы хотите:

RewriteEngine on
RewriteMap lower int:tolower
RewriteCond ${lower:%{REQUEST_URI}} -U
RewriteRule [A-Z] ${lower:%{REQUEST_URI}} [R=302,L]
  • Карта нижнего регистра для преобразования / SoMeThinG в / something
  • REQUEST_URI существует (-U - внутренний запрос apache)
  • Правило для фактического выполнения перезаписи

Я не знаю, можно ли применить RewriteMap в условии или применимо только к правилу. Они основаны на обмене экспертами принятом ответе и небольшом оранжевом обсуждении на форуме .

Ваше «идеальное» решение, вероятно, невозможно, если вы не сможете перечислить все действующие страницы на своем сайте. Если у вас всего несколько действительных страниц, комбинация RewriteMap и текстовой карты сделает именно то, что вам нужно. Если есть сотни / тысячи страниц, вам может потребоваться написать сценарий и использовать директиву prg .

Если вы не можете идентифицировать каждую действительную страницу, вам нужно будет попробовать каждый вариант на всякий случай. Рассматривайте свой URL как двоичную строку, где 0 для строчных букв и 1 для прописных. Просто из вашего простого примера вам нужно будет протестировать 2 ^ 17 вариантов, 128k страниц.

4
ответ дан 30 November 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: