Heim  >  Fragen und Antworten  >  Hauptteil

Als Nginx-Neuling habe ich ein paar Fragen an die Experten.

Ich habe zuvor gesehen, dass MOOC Nginx verwendet, um statische Ressourcen bereitzustellen, also wollte ich versuchen, ngjinx zum Bereitstellen meiner Ressourcen zu verwenden. Jetzt brauchen wir folgende Fragen:

  1. Zum Beispiel dieser Link auf MOOC: http://www.imooc.com/course/list, wie passt er zum Suffix /course/list,我只能使用list.html,我想让每个连接都不会出现.html nach der URL? Schreibt dies die URL neu oder ist sie mit dem Standort konfiguriert?
2.


Das Obige ist eine Standortkonfiguration, die für den Reverse-Proxy verwendet wird. Es sollte nicht in der Lage sein, mit etwas wie

übereinzustimmen, aber es stimmte nicht überein, sodass es nicht an den Proxyserver weitergeleitet wurde, aber die statische Seite wurde normal angezeigt. /test/test.html

Aber es kann so übereinstimmen:

um die richtigen Daten zu erhalten. /products/getproducts/2,确实转发到了:localhost:8086/products/getproducts/2

Lass uns zuerst diese beiden fragen. Ich weiß nicht viel über Server, also bin ich vielleicht ein bisschen ein Idiot. Ich hoffe, du kannst sie beantworten

为情所困为情所困2713 Tage vor547

Antworte allen(2)Ich werde antworten

  • 大家讲道理

    大家讲道理2017-05-16 17:25:54

    第一个问题:
    Nginx用try_files指令可以很方便地把请求数据导入到框架的前端控制器比如index.php里:

    location {
        try_files $uri $uri/ /index.php?$args;
    }
    

    前端控制器index.php可以用$_SERVER['REQUEST_URI']获取/course/list这串URL参数,如果后面还有参数,比如/course/list?page=2&tag=mysql,这时可以用$_SERVER['QUERY_STRING']获取查询串page=2&tag=mysql,然后自行urldecode后用explode以&分割串获得类似$_GET的参数数组,也可以直接使用$_GET拿到参数数组.

    总而言之,就是由程序入口index.php及其里面的程序决定是加载HTML静态文件返回,还是连接数据库可进行处理.
    如果你想让Nginx判断是否命中HTML缓存,可以这样配置:

    location / {
        try_files $uri $uri/ /html$uri.html /index.php?$args;
    }
    

    比如访问/post/1024,Nginx会按try_files给定的顺序尝试访问以下文件:
    /post/1024 ($uri 表示文件)
    /post/1024/ ($uri/ 表示目录)
    /html/post/1024.html (/html$uri.html 表示你的HTML静态缓存)
    如果都不存在,则连同参数把URI信息交给index.php处理 (最后的/index.php?$args表达的就是这个意思).

    Antwort
    0
  • 習慣沉默

    習慣沉默2017-05-16 17:25:54

    问题 1,可以使用rewrite方式,例如:

    rewrite "^/(course/.*)/?"   $1.html last;
    

    需要注意的是只重写所有course 开头的请求
    xxx.com/course/list -> xxx.com/course/list.html
    xxx.com/course/list/sub -> xxx.com/course/list/sub.html

    问题 2
    感觉应该还有其他的location 配置,如果方便把整个nginx配置贴出来

    Antwort
    0
  • StornierenAntwort