Назад | Перейти на главную страницу

почему мой редирект mod_rewrite работает только для запрошенной страницы, а не для необходимых файлов css, js?

Я пробую свои первые шаги с настройкой mod_rewrite чтобы сделать URL-адреса приложения немного приятнее.

У меня есть система смены скинов, причем скины устанавливаются через query parameter, поэтому любая из следующих ссылок инициирует загрузку (и сохранение в виде файлов cookie) определенного скина:

www.mysite.com/index.html?skin=123

Я пытаюсь сделать красивые входные ссылки в систему, поэтому я использую это:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/(.*)/$ /index.html?app=%1 [L]
</IfModule>

который, кажется, работает правильно, поэтому я загружаю правильную страницу по следующим ссылкам:

 www.mysite.com/890/  =>  www.mysite.com/index.html?skin=890

Однако правильно загружена только моя начальная страница, все файлы CSS и JS по-прежнему запрашиваются с неправильного пути. www.mysite.com/890/ vs. www.mysite.com

Вопрос:
Как я могу переписать все запрошенные файлы (css, js, img ...), чтобы они были правильно перенаправлены, за исключением /890/ дорожка? Кроме того, есть способ сделать мою перезапись более универсальной, чтобы я мог обрабатывать оба

 www.mysite.com/890/         => www.mysite.com/index.html?skin=890
 www.mysite.com/890/foo.html => www.mysite.com/foo.html?skin=890
 www.mysite.com/890/bar.html => www.mysite.com/bar.html?skin=890

Спасибо, что пролили свет!

Потому что вы установили перезапись только тех URI, которые заканчиваются косой чертой. Если вы хотите, чтобы он также использовал все, что следует за косой чертой, вам нужно немного больше. Попробуй это:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/(.*)/$ /index.html?app=%1 [L]
    RewriteRule ^/(.*)/(.+)$ /$1?app=$2 [L]
</IfModule>

Второе правило гласит: «Если он содержит косую черту, сохраняйте все до следующей косой черты в $ 1. Затем игнорируйте косую черту. Все, что следует за второй косой чертой, следует хранить в $ 2».

www.mysite.com/foo/ будет пойман первым правилом перезаписи и переписан на www.mysite.com/index.html?skin=foo

www.mysite.com/foo/whatever.html будет пойман вторым правилом перезаписи и переписан на www.mysite.com/whatever.html?skin=foo