Nginx配置/重写

时间:2016-03-17 23:11:12

标签: apache .htaccess nginx rewrite config

我想配置nginx以这种方式运行:

[确定]如果我浏览到domain.com/,则会调用/var/www/index.php文件

[如何?]如果我浏览到domain.com/blah,则调用/var/www/controller.php 在apache上,由重写条件完成:

<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="300">
  <rect x="10" y="10" width="100" height="150" fill="blue"/>
  <foreignObject x="10" y="10" width="100" height="150">
      <div xmlns="http://www.w3.org/1999/xhtml">
          Here is a <strong>paragraph</strong> that requires <em>word wrap</em></div>
  </foreignObject>

  <circle cx="200" cy="200" r="100" fill="red" />
  <foreignObject x="120" y="120" width="180" height="180">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <ul>
          <li><strong>First</strong> item</li>

          <li><em>Second</em> item</li>
          <li>Thrid item</li>
        </ul>
      </div>
  </foreignObject>
</svg>

[如何?]如果我浏览到domain.com/api/someMethod,则调用/var/www/api/controller.php 在apache上,由重写条件完成:

RewriteRule (.*) controller.php [L,QSA]

[如何?]如果我浏览到domain.com/image.png,nginx会显示图像/var/www/image.png 在apache上,由重写条件完成:

RewriteRule ^api api/controller.php [L,NC]

我的nginx配置:

RewriteRule \.(js|css|gif|png|jpg|ico|txt|woff|woff2)$ - [L,NC]

1 个答案:

答案 0 :(得分:0)

配置的重要部分是:

root /var/www;
index index.php;

location = / { }

location / {
    try_files $uri $uri/ /controller.php;
}

location /api {
    try_files $uri $uri/ /api/controller.php;
}

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

前两行来自原始配置。

location =将确保URI /遵循index index.php而不是try_files规则。

location /定义默认操作,在子目录上提供image.pngindex.php,在其他任何内容上提供controller.php

location /api针对controller.php修改此行为。

location ~ \.php$块实现fastcgi接口。请注意,include fastcgi_params;应该出现在任何fastcgi_param指令之前,以避免后者被静默覆盖。

如果您希望URI domain.com/blah.php拨打controller.php而不是投放404,请将=404更改为/controller.php

请参阅this以获取nginx指令列表。