Nginx重写干净url的规则

我想写干净的URL的nginx重写规则。

每次用户点击;

http://domain.com/abc/12/16/abc-def-ghi 

我需要执行

 domain.com/abc.php?a=12&b=16&c=abc-def-ghi 

现在我的正则expression式是正确的:

 ^\/abc\/(\d+)\/(\d+)\/(\w+\S+)$ 

http://rubular.com/regexes/11063

和规则是

 if (!-e $request_filename) { rewrite ^\/abc\/(\d+)\/(\d+)\/(\w+\S+)$ abc.php?a=$1&b=$2&c=$3 last; } 

但它是给“没有input文件指定”。 我找不到问题是什么?

“没有input文件指定”错误来自php处理程序。 这意味着重写规则工作正常,但其他一些行不是前缀适当的base_dir。

尝试这个…

更换

rewrite ^\/abc\/(\d+)\/(\d+)\/(\w+\S+)$ abc.php?a=$1&b=$2&c=$3 last;

rewrite ^\/abc\/(\d+)\/(\d+)\/(\w+\S+)$ /abc.php?a=$1&b=$2&c=$3 last;

请注意/ (slash)abc.php上面的行。

还有问题可以…

  1. location ~ \.php$ {}块中。 我希望你有一个确定在你的完整configuration:-)
  2. 必须有一行像 – root /var/www/exmaple.com; 在你的configuration。 如果location \ {..}块的location \ {..} ,则可能需要将其复制到location ~ \.php$ {}或者移到location \ {..}但位于server {..}块之内。

如果你可以在这里粘贴你的nginxconfiguration文件,那么debugging会更容易。 🙂