Rewirte规则在Nginx中

我把conisder移到了Nginx上,但我想问你是否可以重写Url到这个模式中,如果你能帮我一下:

  • example.com/username这样的url到profile.php?u = username 。 但是,那么我会在访问其他页面如home.php时遇到问题

  • 一个URL像example.com/questions/102039/that-question into questions.php?quid = 102039

非常感谢你!

如果“用户名”只是字母和数字,不是. s或/ s,那么你可以创build一个类似的规则

 rewrite ^/([A-Za-z0-9]+)$ /profile.php?u=$1 last; 

该命令的前半部分是来自客户端的请求。 下半部分是我们想要转换的请求。 last意味着停止尝试重写这个请求。

如果您对正则expression式不熟悉, [A-Za-z0-9]基本上是指A和Z之间或A和Z或0和9之间的一个字符。之后的+将其扩展为“至less一个string连续”。 通过将它封装在()我们可以保存该string,并在下半部分将其称为$1 (如果我们有多个括号,那么第二个将是$ 2等等)。 最后, ^表示请求的开始, $表示endig。 所以,对/home.php的请求不会被重写,因为它不以/开头,后面跟着一串字母和数字,因为它们到达URL的末尾. 在中间。

我见过有人使用

 if (!-e $request_filename) { rewrite ...; } 

解决了“如果真的存在一个名为”的文件,而不依赖于特定的用户名模式。

第二个可能是

 rewrite ^/questions/([0-9]+)/ /questions.php?quid=$1 last; 

请注意,这个没有使用$ ,因为我们不关心url是如何结束的,我们只需要以/questions/开头,然后是一个数字,然后是一个斜杠。

你可以在这里阅读更多关于nginix的重写function。