Пожалуйста, обратите внимание на следующую структуру каталогов в моем корне:
/resources/css
/resources/js
/resources/templates
/resources/images
Я хочу обслуживать статический контент из указанных выше каталогов, но я также хочу разрешить такую перезапись:
rewrite ^/([a-z]+)(.*)$ /index.php?p1=$1&p2=$2;
Например myurl.com/register/...
переписан на myurl.com/index.php?p1=register&p2=...
Но это правило также переписывает /resources/
, так как мне исключить /resources
от переписать? Или мне нужно еще раз переписать? Ничего из того, что я пробовал, похоже, не работает, поэтому очевидно, что я чего-то не понимаю.
Конфигурация ниже - это то, что я обнаружил, что работает, поскольку все операторы местоположения имеют одинаковый приоритет, они проверяются по порядку.
Это помогло мне понять приоритет блоков местоположения:
location = <path> (longest match wins)
location ^~ <path> (longest match wins)
location ~ <path> (first defined match wins)
location <path> (longest match wins)
Вот конфиг:
// match all css/js/images in resource path
location ~ ^/resources {
root /mypath/myurl.com;
try_files $uri =404;
break;
}
// allow myurl.com/register etc:
location ~ ^/([a-z]+)/(.*)$ {
root /mypath/myurl.com;
rewrite ^/([a-z]+)(.*)$ /index.php?p1=$1&p2=$2;
}
// everything else:
location ~ / {
root /mypath/myurl.com;
index index.php;
}
Комментарии приветствуются!
Вы можете использовать этот пример:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {
set $id $1;
}
if ($request_method = POST ) {
return 405;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
if ($args ~ post=140){
rewrite ^ http://example.com/ permanent;
}
Для получения дополнительной информации посетите: http://wiki.nginx.org/HttpRewriteModule
Вы можете просто добавить другой обработчик местоположения для этого URI, который соответствует существующим файлам - или прерывается, если они этого не делают.
location ~* /resources/(css|js|templates|images) {
if (!-f $request_filename) {
break;
}
root /path/to/resources;
}
rewrite ^/([a-z]+)(.*)$ /index.php?p1=$1&p2=$2;