Nginx 重写规则,确保 URL 干净

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

现在我的正则表达式按照 rubular 是正确的:

^\/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;
}

但它显示“未指定输入文件”。我找不到问题出在哪里?

答案1

php-handler 出现“未指定输入文件”错误。这意味着重写规则工作正常,但其他一些行没有为正确的 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$ {}块中。我希望你的完整配置中肯定有一个 :-)
  2. root /var/www/exmaple.com;您的配置中必须有一行类似 - 的内容。如果它在location \ {..}块中,您可能需要将其复制到location ~ \.php$ {}或移到块外location \ {..}但在server {..}块内。

如果您可以在此处粘贴您的 nginx 配置,将会更容易调试。:-)

相关内容