Apache переписать правило для нормализации дела - PullRequest
0 голосов
/ 23 октября 2018

Я запускаю доступную в Интернете лингвистическую базу данных на сервере.Файл lexirumah в корне документа моего сервера содержит скрипт Python WSGI, обслуживающий приложение.

Я хочу, чтобы приложение было доступно для всех совпадений, независимо от регистра, http://www\.example\.eu/lexirumah?/?.В настоящее время я использую следующий .htaccess файл.

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www.example.eu$ [NC]
RewriteRule ^(.*)$ http://www.example.eu/$1 [L,R=301,NC]

RewriteRule ^lexirumah?$ http://www.example.eu/lexirumah/ [L,R=301,NC]
RewriteRule ^lexiruma/$ http://www.example.eu/lexirumah/ [L,R=301,NC]
RewriteRule ^LexiRumah/$ http://www.example.eu/lexirumah/ [L,R=301]

Options +ExecCGI
<Files "lexirumah">
SetHandler fcgid-script
</Files>

Когда я изменяю последний RewriteRule на

RewriteRule ^LexiRumah/$ http://www.example.eu/lexirumah/ [L,R=301,NC]

, я получаю бесконечное количество перенаправлений.Я хочу сохранить статус 301 для неканонических URL-адресов, поэтому я попытался

RewriteRule ^lexirumah/$ http://www.example.eu/lexirumah/ [L]
RewriteRule ^lexirumah?$ http://www.example.eu/lexirumah/ [L,R=301,NC]
RewriteRule ^lexiruma/$ http://www.example.eu/lexirumah/ [L,R=301,NC]
RewriteRule ^LexiRumah/$ http://www.example.eu/lexirumah/ [L,R=301,NC]

, что привело к внутренней ошибке сервера.(Предположительно, бесконечный цикл перенаправления, который был перехвачен моим браузером ранее, теперь происходит внутри mod_rewrite?)

Теперь я изменил правила, чтобы использовать RewriteCond, чтобы пропустить нормализацию регистра, когда он уже является строчным.

RewriteCond %{REQUEST_URI} !^/lexirumah/$
RewriteRule ^LexiRumah/$ http://www.example.eu/lexirumah/ [L,R=301,NC]

RewriteRule ^lexirumah?$ http://www.example.eu/lexirumah/ [L,R=301,NC]
RewriteRule ^lexiruma/$ http://www.example.eu/lexirumah/ [L,R=301,NC]

Выполняет ли этот набор правил то, что я хочу, или есть какие-то скрытые подводные камни, которые мне необходимо учитывать?

1 Ответ

0 голосов
/ 23 октября 2018

Короткий ответ

Да, ваш набор правил делает то, что вы ожидаете .

Обратите внимание, что вы можете просто использовать ^lexirulah/$ в первом RewriteRule, поскольку вы включаете флаг NC.Как следствие, при сопоставлении регистр не учитывается (No Case).Официальную документацию с флагом NC можно найти здесь .

Кроме того, вам не нужен полный URL (включая хост) для перенаправления.Вы можете напрямую использовать RewriteRule ^xxxx$ /lexirumah/ [L,R=301,NC] для каждого правила.

Ваш начальный вопрос

Когда я изменяю последний RewriteRule на

RewriteRule ^LexiRumah/$ http://www.example.eu/lexirumah/ [L,R=301,NC]

, я получаю бесконечное числоперенаправлений.

Если вы подумаете об этом, легко понять, почему вы попали в бесконечный цикл.Поскольку NC совпадает в режиме без учета регистра, ваше перенаправление всегда будет соответствовать вашему правилу снова и снова.

...