Во многих ответах на правило переписывания при тестировании URL-адреса для определенного условия я часто вижу сочетание использования RewriteCond с REQUEST_URI и самого RewriteRule.
Это просто личные предпочтения или естьпричина производительности или просто ясность правил?Все это, на мой взгляд, веские причины;Мне просто интересно, есть ли конкретная причина.
Я знаю, что есть условия, когда RewriteCond является единственным выбором.Меня интересуют случаи, когда RewriteRule также будет работать.Как правило, это более простые правила.
Вот несколько примеров:
ПРИМЕР 1
Этот ответ имеет общую схему, разрешите определенные папки как есть. Режим обслуживания Htaccess разрешает определенные каталоги
# always allow these folders
RewriteCond %{REQUEST_URI} ^/display_me_always [OR]
RewriteCond %{REQUEST_URI} ^/another_folder [OR]
RewriteCond %{REQUEST_URI} ^/even_more_folders
RewriteRule .+ - [L]
Это может быть сделано только с помощью RewriteRule как:
RewriteRule ^/(?:display_me_always|another_folder|even_more_folders) - [L]
(добавлен?: Для не захвата.Я никогда не уверен, будет ли быстрее иметь более простое правило или не записывать его.)
ПРИМЕР 2
Изменив это для более распространенного сценария, перенаправьте определенные папки в другие папки.
RewriteCond %{REQUEST_URI} ^/display_me_always [OR]
RewriteCond %{REQUEST_URI} ^/another_folder [OR]
RewriteCond %{REQUEST_URI} ^/even_more_folders
RewriteRule ^/[^/]+/(.*)$ /other_location/$1 [L]
Это кажется проще только с правилом.
RewriteRule ^/(?:display_me_always|another_folder|even_more_folders)/(.*)$ /other_location/$1 [R=301,NC]
ПРИМЕР 3
Этот ответ имеет общий шаблон, перенаправьте, если он еще не находится в целевом местоположении. Правило Mod Rewrite для перенаправления всех запросов PDF в другое место .Протестируйте папку с помощью RewriteCond, затем протестируйте файл с правилом.
Я вижу, что отрицательное условие гораздо яснее сделать с RewriteCond, но все еще возможно с RewriteRule.
RewriteCond %{REQUEST_URI} !^/web_content/pdf/
RewriteRule ^(.+\.pdf)$ /web_content/pdf/$1 [L]
Это может быть записано как
RewriteRule ^(?!/web_content/pdf/)(.+\.pdf)$ /web_content/pdf/$1 [L]