не применяйте правило перезаписи к определенному расширению файла

#apache #.htaccess #apache2.4

Вопрос:

У меня есть htaccess, который позволит переписать некоторые URL-адреса в определенных ситуациях.

 RewriteEngine On
RewriteRule .php$ - [L,NC]
RewriteRule ^(?:favicon.ico|(?:index|custom500|custom404).html)$ - [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .  index.php?source=$0 [L,QSA]
 

Внутри у меня есть правило, которое запрещает index.html, custom404.html, custom500.php и фавикон.ico будет включено в переписывание.
Теперь я пытаюсь добавить ту же логику для любого файла, который заканчивается расширением pdf или jpg.
Поэтому я попытался добавить расширение pdf в список исключений

 RewriteRule ^(?:favicon.ico|(?:index|custom500|custom404).html|?:*.pdf)$ - [L,NC]
 

но apache в любом случае будет обслуживать этот файл как index.php?source=myfile.pdf
Как я могу правильно добавить .pdf и .jpg в этот список?

Комментарии:

1. |? в этом месте синтаксически нет смысла, потому что знак вопроса там будет считаться квантором.

2. Если вы вообще не хотите переписывать файлы PDF — тогда почему бы просто не добавить RewriteRule .php$ - [L,NC] их соответствующим образом? Я .pdf бы сказал, что интегрировать «альтернативу» в этот шаблон кажется намного проще.

3. @cbroe как бы ты это сформулировал? и что еще более важно, почему ? правильно ли работает для двух других регулярных выражений в этом правиле?

4. Потому что в этих двух других местах ? он не стоит сам по себе, а является частью синтаксиса «группы без захвата»., (?:

5. RewriteRule .php|.pdf$ - [L,NC] , и сделано — нет? (Или RewriteRule .p(hp|df)$ - [L,NC] , если кто-то действительно захочет считать это улучшением.)