0

我想用 php 和一个简单的重写规则设置我的 nginx 服务器。我试图制定一个重写规则,任何指向不存在的文件或目录的 url 都会重写为 /index.php?q=。我创建了这个 nginx.conf:

events {
}

http {
  include fastcgi.conf;
  server {
    listen          80;
    server_name     www.example.com;
    index           index.php;
    root            /var/www/html/www.example.com;
    location / {
      index     index.php;
      if (!-f $request_filename) {
        rewrite ^/(.*)$ /index.php?q=$1 last;
      }
      if (!-d $request_filename) {
        rewrite ^/(.*)$ /index.php?r=$1 last;
      }
    }
    location ~ \.php {
      try_files $uri =404;
      fastcgi_pass 127.0.0.1:9999;
    }
  }
}

这有效,但并非在所有情况下都有效。它完美地重写了 tihs 之类的 utls:

http://www.example.com/111/222/333

但是两种情况不能按我的意愿工作:

http://www.example.com/111/222/333.php

丢弃 404 错误。

并且 www.example.com/forum/index.php 存在,所以 www.example.com/forum/index.php 执行论坛目录下的 index.php 就可以了。但是 www.example.com/forum url 重写为 /index.php,而不是我想要的在论坛目录中执行 index.php。

我该如何解决这两个问题?

谢谢!

4

2 回答 2

1

您的配置绝对错误,将位置/内容替换为一行:

try_files $uri $uri/ /index.php?q=$uri;
于 2012-07-25T19:32:10.153 回答
0

如果要重定向到特定目录中的索引文件,则需要将重定向格式设置为这样

rewrite ^/((.*/)*)(.*)$ /$1index.php?q=$3
于 2012-07-24T17:20:58.740 回答