Apache mod_rewrite только если запрос не начинается с '/THEMES/'

Я пишу CMS в PHP, и теперь я работаю над функцией тем. У меня есть файл .htaccess:

RewriteEngine ON
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)$ index.php?m=$1
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)/(.+)$ index.php?m=$1&p=$2

Если у меня есть запрос:

/page

он должен загрузить функцию просмотра класса, называемого страницей.

Если у меня есть запрос:

/page/test

он должен загрузить функцию просмотра класса, называемого страницей, с параметром 'test'. Все это работает,

Но я хочу, чтобы он применял RewriteRules ТОЛЬКО, если запрос НЕ начинается с:

/THEMES/

Поэтому я могу применять стили CSS и т.д.

Может ли кто-нибудь мне помочь? Спасибо.

Ответ 1

Вы можете использовать дополнительное правило, чтобы остановить процесс перезаписи:

RewriteRule ^THEMES/ - [L]
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)$ index.php?m=$1
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)/(.+)$ index.php?m=$1&p=$2

Ответ 2

Добавьте это перед правилами перезаписи:

RewriteCond %{REQUEST_URI} !^/THEMES/

Ответ 3

Сделайте что-то вроде:

RewriteRule ^THEMES - [L]

Это означает: если запрос начинается с THEMES, просто выполните его.

Еще одно возможное решение:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

Это означает: не переписывайте, если запрос разрешается в существующий файл (первая строка) или каталог (вторая строка).

Возможно, вы должны прочитать документацию, на самом деле хорошо написано.

Ответ 4

Если вы хотите включить файлы css/js при использовании url-rewriting, используйте этот тег, чтобы указать основной URL-адрес.

< base href="#" onclick="location.href='http://www.your-web-site-adress.com'; return false;" >

Затем вы можете легко включить ваши файлы css/js следующим образом:

< script src="/blabla.js" >

он добавит base href в качестве префикса.