nginx url 重写(无重定向)

nginx url rewrite (No redirection )

嗨,我想将 nginx 重写为 fllowing

http://my-domain/Canada

http://my-domain/rates/callrates.php?c=Canada

用户会将 url 视为 http://my-domain/Canada 并且 php 将执行以下 url

中的页面

http://my-domain/rates/callrates.php?c=Canada

如何在 nginx.conf 中启用此功能?

</p> <pre><code>server { listen 80; server_name my-domain.com; access_log /home/www/my-domain/logs/access.log; error_log /home/www/my-domain/logs/error.log; root /home/www/my-domain/public_html; location / { index index.php login.php; try_files $uri $uri/ $uri.php?$query_string @extensionless-php; error_page 404 /404.php; } location ~* ^/(?<country>\w+)$ { rewrite ^ /testring/callrates.php?c=$country last; } location ~ \.html$ { if (!-f $request_filename) { rewrite ^(.*)\.html$ .php last; } } location ~ .*\.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/r2wconnect.com/public_html$fastcgi_script_name; } location @extensionless-php { rewrite ^(.*)$ .php last; } }

假设您已经有一个有效的 PHP 配置...

如果您的域不执行任何其他操作,则默认操作可能是通过以下方式调用脚本:

location / {
    try_files $uri /rates/callrates.php?c=$uri;
}

以上的副作用是留在前导/

如果你想让规则更具体,你可以用正则表达式保护它(它也能正确提取国家名称):

location ~* ^/(?<country>\w+)$ {
    rewrite ^ /rates/callrates.php?q=$country last;
}