添加斜杠并剪切文件扩展名(nginx规则)

时间:2016-02-25 20:07:46

标签: mod-rewrite nginx url-rewriting seo

我试图找出如何添加" /"到每个网址的末尾。 这个网址需要没有扩展。 例如:

example.com/about.php; example.com/about.html => example.com/about/

我在配置nginx重写规则中是假的。 这是我的配置:

server{
    root /usr/share/nginx/www/example.com;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name example.com www.example.com;

    client_max_body_size 20M;

    # BEGIN W3TC Browser Cache
    gzip on;
    gzip_types text/css text/x-component application/x-javascript application/json  application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text$;
    # END W3TC Browser Cache

    location /blog {
            # First attempt to serve request as file, then
            # as directory, then fall back to index.html
            # try_files $uri $uri/ /index.php;
            try_files $uri $uri/ /blog/index.php?q=$uri&$args;
            # Uncomment to enable naxsi on this location
            # include /etc/nginx/naxsi.rules
    }



    location ~* ^.+\.(rss|atom|jpg|jpeg|gif|png|ico|rtf|js|css|json)$ {
            expires max;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }

    location / {
        try_files $uri $uri.html $uri/ @extensionless-php;
        index index.php index.html index.htm;
    }

    location @extensionless-php {
        rewrite ^(.*)$ $1.php last;
    }

}

我找到了一些解决方案,但我无法将它组合起来,因为我在nginx中使用了noob。

1 个答案:

答案 0 :(得分:1)

您需要更改部分配置

location / {

                        rewrite ^(/.*[^/])\.(html|php)$ $1/ permanent;
                        rewrite ^(/.*[^/])(?!/)$ $1/ permanent;


                        try_files $uri $uri.html $uri/ @extensionless-php;
                        index index.php;

                }

                location @extensionless-php {
                   rewrite ^(.*)/$ $1.php last;
                }

第一行rewrite ^(/.*[^/])\.(html|php)$ $1/ permanent;将重定向所有扩展名为.html或.php

的请求
rewrite ^(/.*[^/])(?!/)$ $1/ permanent;

将添加/到请求,其结尾没有/