URL重写就像是你在写一个地址,但是你不想让别人看到你真正的地址,所以你用了一个别名来代替它。当有人使用这个别名时,邮递员(在这里是Nginx服务器)会知道要把信送到哪个真正的地址去。
在Nginx中,URL重写可以通过rewrite
指令来实现。下面我将用一个非常简单的例子来展示如何配置Nginx的URL重写功能。
假设你有一个网站,里面有一个页面,它的真实地址是http://example.com/real-page.html
,但你希望别人通过http://example.com/cool-page
来访问这个页面,而不是看到“real-page”这个单词。
你可以按照以下步骤来配置Nginx的URL重写:
- 打开Nginx配置文件:
首先,你需要找到Nginx的配置文件,它通常位于/etc/nginx/nginx.conf
或者/etc/nginx/sites-available/
目录下的某个文件中。 - 添加
server
块或在已有的server
块中添加rewrite
指令:
你需要在Nginx配置中找到与你网站域名对应的server
块,然后在这个块里面添加rewrite
指令。如果你还没有一个server
块,那么你需要先创建一个。 - 编写
rewrite
指令:rewrite
指令的语法是:rewrite regex replacement [flag];
-
regex
是你想要匹配的正则表达式,用来识别哪些URL需要被重写。 -
replacement
是用来替换原始URL的字符串。 -
[flag]
是用来定义重写的行为,比如是否停止进一步的处理等。常用的标志有last
、break
、redirect
和permanent
等。
下面是一个具体的配置例子:
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
。
- 保存并退出配置文件:
完成配置后,记得保存文件并退出编辑器。 - 检查并重新加载Nginx配置:
运行nginx -t
来检查你的配置是否有语法错误,如果一切正常,再运行nginx -s reload
来让Nginx重新加载配置文件。
现在,当用户访问http://example.com/cool-page
时,Nginx会自动将其重定向到http://example.com/real-page.html
,而用户不会意识到URL已经被重写了。