RewriteRule не работает, не знаю, как проверить это регулярное выражение - PullRequest
0 голосов
/ 05 января 2011

Здравствуйте, у меня есть правило перезаписи, которое я пытаюсь реализовать на локальном хосте, но не могу заставить его выполнить действие независимо от того, как я настроил регулярное выражение

файлы находятся в этой схеме именования /docroot/css/stylesheet.min.css, и я распечатал их в коде, подобном / docroot / css / stylesheet.min.123438348.css (число является примером, полученным из getмодифицированная функция).Примечание. Docroot - это пример каталога

. Как я могу заставить сервер игнорировать числа и перенаправлять на файл stylesheet.min.css. Мне нужно сделать это также для всех файлов css и js (/ js и / css)как одно конкретное изображение spritemap

моя текущая попытка

RewriteRule ^/(docroot)/(js|css)/(.+)\.(min)\.(.+)\.(js|css)$ /$1/$2/$3.$4.$6
RewriteRule ^(/docroot/images/spritemap)\.([0-9]+)\.(png)$ $1.$3 

Я завернул это в "Я нахожусь на Linux" .. это должно быть mod_rewrite.so?"


ТАК Я пытаюсь настроить RewriteRule на моем сервере для кэширования статических объектов. Файлы находятся в этой схеме именования /docroot/css/stylesheet.min.css, и я напечатал их в коде, подобном / docroot / css / stylesheet.min.123438348.css (номер - пример, взятый из функции getодификации). Примечание docroot - это пример каталога

как мне заставить сервер игнорировать номера и перенаправить на stylesheet.min.cssМне нужно сделать это для каждого файла css и js (/ js и / css), а также для одного конкретного изображения spritemap

моей текущей попытки

RewriteRule ^/(docroot)/(js|css)/(.+).(min).(.+).(js|css)$ /$1/$2/$3.$4.$6 
RewriteRule ^(/docroot/images/spritemap).([0-9]+).(png)$ $1.$3

Обновление: теперь у меня есть настройкакак это

<Location />
RewriteEngine on
Options FollowSymLinks
RewriteRule ^(.+)\.(min)\.([0-9]+)\.(js|css)$ $1.$2.$4 [L]
</Location>

Это переписывает localhost / docroot / css / stylesheet.min.12343242.css в /var/www/html/docroot/trunk/docroot/css/stylesheet.min.css

так чтополучает правильный файл, как мне заставить apache снять начало того, что / var / www / html / docroot / trunk /

<Location />
    RewriteEngine on
    RewriteBase /
    RewriteRule ^(.+)\.(min)\.([0-9]+)\.(js|css)$ $1.$2.$4 [PT]
</Location>

Опции FollowSymLinks в списке каталогов

Хорошо, теперь вместо

/var/www/html/docroot/trunk/docroot/css/stylesheet.min.css 

я получаю URL, который выглядит следующим образом

/docroot/trunk/docroot/css/stylesheet.min.css

Я удалил команду RewriteBase, поэтому мне все еще нужно удалить начало / docroot / trunk

1 Ответ

0 голосов
/ 06 января 2011

Шаблон правил для перезаписей для каждого каталога отличается от правил для глобальных перезаписей:

  • При использовании механизма перезаписи в файлах .htaccess префикс для каждого каталога (который всегда одинаков для определенного каталога) автоматически удаляется для сопоставления с RewriteRule и автоматически добавляется после любой относительной (не начиная с косой черты или имени протокола) замены встречается конец набора правил. См. Директиву RewriteBase для получения дополнительной информации о том, какой префикс будет добавлен обратно в относительные подстановки.
  • Удаленный префикс всегда заканчивается косой чертой, что означает, что сопоставление происходит со строкой, которая никогда не имеет передней косой черты. Следовательно, A Pattern с ^/ никогда не совпадает в контексте каталога.

Попробуйте эти шаблоны без начального префикса /:

RewriteRule ^(docroot)/(js|css)/(.+)\.(min)\.(.+)\.(js|css)$ /$1/$2/$3.$4.$6
RewriteRule ^(docroot/images/spritemap)\.([0-9]+)\.(png)$ $1.$3 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...