URL重写就像是你在写一个地址,但是你不想让别人看到你真正的地址,所以你用了一个别名来代替它。当有人使用这个别名时,邮递员(在这里是Nginx服务器)会知道要把信送到哪个真正的地址去。

在Nginx中,URL重写可以通过rewrite指令来实现。下面我将用一个非常简单的例子来展示如何配置Nginx的URL重写功能。

假设你有一个网站,里面有一个页面,它的真实地址是http://example.com/real-page.html,但你希望别人通过http://example.com/cool-page来访问这个页面,而不是看到“real-page”这个单词。

你可以按照以下步骤来配置Nginx的URL重写:

  1. 打开Nginx配置文件
    首先,你需要找到Nginx的配置文件,它通常位于/etc/nginx/nginx.conf或者/etc/nginx/sites-available/目录下的某个文件中。
  2. 添加server块或在已有的server块中添加rewrite指令
    你需要在Nginx配置中找到与你网站域名对应的server块,然后在这个块里面添加rewrite指令。如果你还没有一个server块,那么你需要先创建一个。
  3. 编写rewrite指令
    rewrite指令的语法是:rewrite regex replacement [flag];
  • regex 是你想要匹配的正则表达式,用来识别哪些URL需要被重写。
  • replacement 是用来替换原始URL的字符串。
  • [flag] 是用来定义重写的行为,比如是否停止进一步的处理等。常用的标志有lastbreakredirectpermanent等。

下面是一个具体的配置例子:

server {  
    listen 80;  
    server_name example.com;  
      
    # 重写规则:当访问 /cool-page 时,实际上访问 /real-page.html  
    rewrite ^/cool-page$ /real-page.html last;  
      
    location / {  
        # ... 其他配置项,比如代理传递、静态文件路径等 ...  
    }  
}

在这个配置中:

  • ^/cool-page$ 是一个正则表达式,它匹配任何以/cool-page开头并结束的URL。
  • /real-page.html 是用来替换匹配到的URL的字符串,即真实的页面地址。
  • last 是一个标志,告诉Nginx在重写后停止处理后续的rewrite规则,并立即开始搜索对应的新URI的location
  1. 保存并退出配置文件
    完成配置后,记得保存文件并退出编辑器。
  2. 检查并重新加载Nginx配置
    运行nginx -t来检查你的配置是否有语法错误,如果一切正常,再运行nginx -s reload来让Nginx重新加载配置文件。

现在,当用户访问http://example.com/cool-page时,Nginx会自动将其重定向到http://example.com/real-page.html,而用户不会意识到URL已经被重写了。