Я пробую свои первые шаги с настройкой 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