#.htaccess #mod-rewrite #url-rewriting #apache2
#.htaccess #мод-перезапись #url-переписывание #apache2
Вопрос:
В настоящее время я делаю что-то подобное в моем .htaccess:
RewriteRule ^assets/(.*)$ application/views/assets/$1
RewriteCond %{REQUEST_FILENAME} !/application/views/assets/.*
# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
Однако, есть ли способ, которым я могу удалить эту первую секунду перезаписи, например, использовать где-нибудь [L] или [S = 4], чтобы после применения этого первого RewriteRule (для ресурсов) мы двигались дальше и не применяли дальнейшие правила?
(Кстати, это файл .htaccess, используемый для платформы KohanaPHP.)
Ответ №1:
Пусть ваше правило будет таким:
RewriteEngine on
Options FollowSymlinks -MultiViews
RewriteCond %{REQUEST_URI} ^/assets
RewriteRule . - [S=10]
RewriteRule ^assets/(.*)$ /application/views/assets/$1 [L]
# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)b.* /index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* /index.php/$0 [PT]
Обратите S=10
внимание вверху, чтобы пропустить следующие 10 правил, если статистика REQUEST_URI совпадает с /assets. И из-за этого правила я мог безопасно удалить отрицательное условие правила RewriteCond %{REQUEST_URI} !^/application/views/assets/
Чтобы узнать больше о флагах опций в mod_rewrite, пожалуйста, смотрите этот документ: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriteflags
Комментарии:
1. Вау, кажется, больше работы, чем просто оставить строку RewriteCond. Тем не менее, вы объяснили мне некоторые вещи. Вы победитель.