mod_rewrite, чтобы сократить путь к файлам URL - PullRequest
3 голосов
/ 16 ноября 2011

У меня возникают сложности с тем, чтобы заставить mod_rewrite делать то, что мне нужно.

У нас есть группа виртуальных поддоменов в установке Drupal.Итак, academics.univ.edu, about.univ.edu и т. Д. Являются частью одной и той же базовой установки Drupal.

Доступ к файлам в настоящее время осуществляется academics.univ.edu/sites/all/academics/files/myfile..jpg.Однако этот путь также будет работать как about.univ.edu/sitse/all/about/files/myfile.jpg или любой другой действительный поддомен.

Мы хотели бы использовать mod_rewrite для принятия academics.univ.edu/files/myfile.jpg и доставьте файл из указанного выше места.

Вот что я пробовал:

RewriteCond %{REQUEST_URI} ^(about|academics|bursar|calendar)\.univ\.edu\/files\/(.*)$ [NC]
RewriteRule ^/sites/all/files/$1/$2 [L,NC]

Я, вероятно, поступаю неправильно, но яхотел проверить это.Я могу заставить субдомены работать, создавая отдельные правила, используя HTTP_HOST, но я хотел меньше правил в файле.Кроме того, я не могу заставить HTTP_HOST работать на сайтах, которые существуют как подкаталог в субдомиане.Например, undergrad.univ.edu/biology/files/myfile.jpg должен предоставить /sites/all/biology/files/myfile.jpg

1 Ответ

2 голосов
/ 16 ноября 2011

Вы не можете сопоставить хост в% {REQUEST_URI}, вам нужно использовать% {HTTP_HOST}, а затем использовать обратную ссылку %1 для доступа к этому совпадению.Фактический URI может быть сопоставлен в самом правиле.Примерно так:

RewriteCond %{HTTP_HOST} ^(about|academics|bursar|calendar)\.univ\.edu$  [NC]
RewriteRule ^files/(.*)$ /sites/all/files/%1/%2 [L,NC]

%1 указывает на совпадение (about|academics|bursar|calendar) в RewriteCond, а $1 ссылается на совпадение (.*) в RewriteRule.Таким образом, этот пример примет запрос к http://about.univ.edu/files/foo.html и перезапишет запрос к /sites/all/files/about/foo.html.

Кроме того, если это в конфигурации виртуального хоста или сервера, вам нужен "/" между "^ "и" файлы "в RewriteRule.

...