Как я могу исключить файлы CSS, JS, JPG, GIF из правил mod_rewrite?

Это то, что у меня есть до сих пор:

RewriteRule ^([A-Za-z0-9_]*)/?$ index.php?page=$1 [NC] RewriteRule ^([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/?$ index.php?page=$1/$2 [NC] RewriteRule ^([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/?$ index.php?page=$1/$2/$3 [NC] 

Все мои файлы css находятся в / ssi /.

Самой структурой сайта является /index.php?page=$whatever

$ any иногда включает / 's, поэтому, если я перехожу в / whatever / whatever2, с моими текущими правилами, он предполагает, что css находится в /whatever/ssi/*.css.

Надеюсь, все это имеет смысл.

Поэтому, в основном, я просто хочу написать условие, в котором говорится: «Если это файл css, не применяйте эти правила».

Спасибо за любую помощь, которую я могу получить :).

Solutions Collecting From Web of "Как я могу исключить файлы CSS, JS, JPG, GIF из правил mod_rewrite?"

Проблема, с которой вы сталкиваетесь, заключается не в том, что mod_rewrite применяется к файлам css, а скорее к тому, что пути вашего html к вашему css относительны. Браузер просто запрашивает css из правильного относительного пути. У вас действительно есть два варианта.

  1. Сделайте свои пути к вашему css относительно домена, а не к странице (например, используйте /ssi/styles.css вместо ssi / styles.css)
  2. Создайте правило перезаписи, чтобы перенаправить все css на правильный URL. (например, RewriteRule (* .css) / ssi / $ 1

Предполагая, что вы используете Apache с модулем mod_rewrite, вы должны попробовать RewriteCond Directive. В следующем примере исключаются все совпадения из RewriteCond для следующей строки с помощью директивы RewriteRule. Правила в основном являются регулярными выражениями. В моем примере исключается все, что начинается с favicon.ico, а также с css, который является папкой, где находятся мои таблицы стилей.

 RewriteEngine On RewriteCond $1 !^(favicon\.ico|favicon\.png|media|robots\.txt|crossdomain\.xml|css|js) RewriteRule ^(.*)$ index.php/$1 [L] 

Дальнейшее чтение: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

… он предполагает, что css находится в /whatever/ssi/*.css.
Я просто хочу написать условие, в котором говорится: «Если это файл css, не применяйте эти правила».

Это переводит непосредственно на

 RewriteCond %{REQUEST_URI} !^/whatever/ssi/[^/]+\.css$ RewriteRule ... 

Думаю, мое решение будет самым эмпирическим, но это сработало:

 RewriteEngine On RewriteBase / RewriteRule ^([a-z0-9-]+)$ /?page=$1 [NC,L] RewriteRule ^([a-z0-9-]+)/([a-z0-9-]+)$ /?page=$1&action=$2 [NC,L] 

Это переведет http://example.com/?page=contact&action=send на http://example.com/contact/send. Значения моей страницы были только буквенно-числовыми и содержат знак минус как разделитель слов, но вы можете заменить значения, соответствующие все что тебе нужно.

И, конечно, вам нужно прикрепить все ваши js, css, img-каталоги косой чертой на страницах. Таким образом, css / style.css будет /css/style.css или использовать абсолютный URL-адрес.