Это то, что у меня есть до сих пор:
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, не применяйте эти правила».
Спасибо за любую помощь, которую я могу получить :).
Проблема, с которой вы сталкиваетесь, заключается не в том, что mod_rewrite применяется к файлам css, а скорее к тому, что пути вашего html к вашему css относительны. Браузер просто запрашивает css из правильного относительного пути. У вас действительно есть два варианта.
Предполагая, что вы используете 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-адрес.