从page.php重写文件扩展名到nginx中的page.html

时间:2016-01-15 11:57:04

标签: nginx

我正在使用nginx,并希望将我的网址从page.php更改为page.html 我想要实现两件事,

  1. 从domain.com/page.php更改网址 - > domain.com/page.html
  2. 我页面中的anchore标记是domain.com/page.html,但实际页面是page.php。我希望这可以在不改变我的锚标签的情况下工作。
  3. 我有一个像domain.com/page.php?get=value的网址,这必须像domain.com/value一样
  4. 由于nginx知识有限,请向我推荐脚本

1 个答案:

答案 0 :(得分:3)

当有人说他们想要重写从A到B的URL时,他们通常意味着相反的方式。他们真正想要的是URL地址栏显示B,但实际访问A的现有内部资源。

根据您的问题,我认为您希望网址地址栏显示page.html,但在内部提供page.php资源。

我们假设您有混合内容,一些.html和一些.php,因此首先您可能希望删除任何带有内部重写的.html扩展名,以便可以测试.html.php文件名。 内部重写不会影响URL地址栏,但只是让服务器更容易在内部路由请求。

location ~* \.(html|php)$ {
    rewrite ^(.*)\.(html|php)$ $1 last;
}

然后,根位置可以处理无扩展名的URI并测试.html.php文件的存在以及您想要的任何其他内容。

location / {
    try_files $uri $uri/ $uri.html @php;
}

PHP文件被卸载到一个命名位置,该位置包含将请求上游发送到PHP解释器的代码:

location @php {
    try_files $uri.php /page.php?get=$uri;

    include       fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass ...;
}

以上所有nginx指令均为documented here