我有一个电子邮件validation脚本,如下所示:
http://example.com/v/index.php?t=TOKEN_EMAILED_TO_CLIENT
我希望它看起来像这样:
http://example.com/v/TOKEN_EMAILED_TO_CLIENT
基本上只是删除index.php?t=部分的URL,但仍然允许index.php文件来处理令牌。
我已经尝试了以下三个设置,他们都没有工作:
location /v/ { try_files index.php$args; }
以上结果导致nginx.conf文件失败
location ^~ /v/ { try_files /v/index.php?q=$uri; }
以上结果导致nginx.conf文件失败
location ^~ /v/ { rewrite ^/v/index.php?q=(.*)$ $1 permanent; }
上面通过了nginx.conf文件的要求,但仍然没有做到我想要的。 它访问http://example.com/v/TOKEN_EMAILED_TO_CLIENT时显示404错误
任何帮助将不胜感激。
首先,如果在定义的位置之前,没有任何匹配这个模式的正则expression式,那么不需要使用^~ 。 你想要做的是基本上有正确的URI,并重写它们来传递一个参数到你的PHP应用程序。 在这种情况下,适当的解决scheme是使用重写。
你错过的东西是,你匹配的URI是重写指令的第一个参数,所以它显然可以不匹配^/v/index.php?q=(.*)$因为它等于/v/TOKEN_EMAILED_TO_CLIENT 。 rewrite指令的第二个参数是要重写的URI。
所以给你有一个这样的位置处理.php文件的位置:
location ~ \.php$ { [ ... ] }
那么你需要这个位置块:
location /v/ { rewrite ^/v/(.*)$ /v/index.php?t=$1? last; }