Обойти одно условие перезаписи Apache, но продолжить обработку всех других условий - PullRequest
0 голосов
/ 01 февраля 2020

Попытка помочь другу, чтобы его сайт ProcessWire работал правильно. В htacess есть такая строка:

# PW-PAGENAME
# ----------------------------------------------------------------------------------------------- 
# 16A. Ensure that the URL follows the name-format specification required by PW
# See also directive 16b below, you should choose and use either 16a or 16b. 
# ----------------------------------------------------------------------------------------------- 

RewriteCond %{REQUEST_URI} "^/~?[-_.a-zA-Z0-9/]*$"

Он хотел бы исключить указанную c директорию "/ images /" из этого единственного указанного условия c и затем продолжить обработку другие условия.

Я пробовал так много разных вещей, но ни одна из них не сработала, но, похоже, что-то должно быть простым и что я должен знать, как это сделать :-), но я не могу для жизнь меня понять это.

Любая помощь будет высоко ценится!

1 Ответ

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

RewriteCond ничего не делает сам по себе, он просто содержит условие, которое должно быть истинным для обработки следующего RewriteRule. Вот большая выдержка из .htaccess, включенного в ProcessWire (без комментариев):

RewriteCond %{REQUEST_URI} "^/~?[-_.a-zA-Z0-9/]*$"

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !(favicon\.ico|robots\.txt)

RewriteRule ^(.*)$ index.php?it=$1 [L,QSA]

Все директивы RewriteCond ограничивают только те запросы, которые переписываются в файл ProcessWire index.php. А именно, следующие типы запросов не обрабатываются ProcessWire в соответствии с этими правилами:

  • Не-ASCII пути ([-_.a-zA-Z0-9/]*), хотя вы можете использовать директиву 16b чтобы изменить это.
  • Существующие файлы и каталоги (!-f, !-d)
  • Некоторые указанные c файлы (!(favicon\.ico|robots\.txt))

Как вам нужно изменить это в зависимости от того, как вы хотите обрабатывать файлы в папке с изображениями.

Apache обслуживает данные c файлы

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

При этом, если вы хотите, не хотите любых путей которые начинаются с /images/ для обработки ProcessWire, добавьте еще один RewriteCond перед RewriteRule, что-то вроде этого:

RewriteCond %{REQUEST_URI} !^/images/.*$
RewriteRule ^(.*)$ index.php?it=$1 [L,QSA]

ProcessWire обслуживает данные c файлы

Если вы хотите, чтобы изображения находились внутри Ваша папка images будет обслуживаться Pr ocessWire вместо сервера, вам придется изменить несколько существующих RewriteConds. Вероятно, будет проще дублировать RewriteRule с отдельным RewriteCond, который будет соответствовать только указанному пути c. Следующие директивы (добавленные за существующим RewriteRule) переписывают все запросы, начинающиеся с /images/, что позволяет обрабатывать их с помощью ProcessWire.

RewriteCond %{REQUEST_URI} ^/images/.*$
RewriteRule ^(.*)$ index.php?it=$1 [L,QSA]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...