Как исключить файлы CSS, JS, JPG, GIF из правил mod_rewrite? - PullRequest
3 голосов
/ 13 сентября 2010

Это то, что я имею до сих пор:

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=$whwhat

$ независимо от того, что иногда включает в себя /, поэтому, если я перейду к / независимо от того / что-то2, с моими текущими правилами, предполагается, что CSS находится в /whwhat/ssi/*.css.

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

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

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

Ответы [ 4 ]

4 голосов
/ 13 сентября 2010

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

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

Предполагая, что вы используете Apache с модулем mod_rewrite, вы должны попробовать директиву RewriteCond.В следующем примере исключаются все совпадения из 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

0 голосов
/ 21 ноября 2013

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

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.

0 голосов
/ 13 сентября 2010

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

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

RewriteCond %{REQUEST_URI} !^/whatever/ssi/[^/]+\.css$
RewriteRule ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...