我有以下配置:
server {
listen 80;
listen [::]:80;
server_name example.com;
return 302 https://$server_name$request_uri;
}
server {
# SSL configuration
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl on;
ssl_certificate /etc/ssl/certs/cert.pem;
ssl_certificate_key /etc/ssl/private/cert.pem;
server_name example.com;
root /var/www/example;
index index.html;
location / {
if ( $http_user_agent = "Dinosaur" ) {
rewrite https://example.com/ https://example.com/example.gif;
}
try_files $uri $uri/ =404;
}
}
在向根发出的请求中https://example.com,我希望提供 index.html。但是,如果请求是通过特殊用户代理发出的,那么我希望它直接提供 example.gif 文件(而不是 301 或 302 重定向到https://example.com/example.gif网址)。
我该怎么做?重写似乎不起作用。该try_files
指令在上下文中不起作用if
,这对于检查用户代理条件可能是必要的,也可能不是必要的。
答案1
的根的正确位置语句https://example.com
是location = /
。该location /
语句匹配任何未被其他位置块处理的 URI。请参阅这个文件了解详情。
你的rewrite
说法完全错误。参见这个文件了解详情。
测试的值$http_user_agent
是通过if
块来完成的。~
如果=
值包含“恐龙”而不是完全匹配。此外,if
块内的语句应限于rewrite...last
和return
。请参阅这个文件了解详情。
location / {
try_files $uri $uri/ =404;
}
location = / {
if ( $http_user_agent ~ "Dinosaur" ) {
rewrite ^ /example.gif last;
}
}
如果if
未采取阻止措施,则默认操作是处理该index
语句并提供该index.html
文件。