我想为干净的 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
问题也可能是...
- 在
location ~ \.php$ {}
块中。我希望你的完整配置中肯定有一个 :-) root /var/www/exmaple.com;
您的配置中必须有一行类似 - 的内容。如果它在location \ {..}
块中,您可能需要将其复制到location ~ \.php$ {}
或移到块外location \ {..}
但在server {..}
块内。
如果您可以在此处粘贴您的 nginx 配置,将会更容易调试。:-)