使用Nginx将旧的php文件重定向到新的URL

时间:2013-05-16 15:57:52

标签: regex redirect nginx

我的网站的网址与PHP文件相对应:

www.mysite.com/cat.php?id=stuff

这些PHP文件不再存在,如何对新网址进行301重定向(出于搜索引擎优化的原因):

 www.mysite.com/stuff

我试过

 rewrite  ^/cat\.php\?id=stuff  http://www.mysite.com/stuff? permanent;

但它不起作用,我得到“未指定输入文件”。

感谢您的帮助!

编辑:

有关我的配置的更多信息(网站由Wordpress提供支持):

    index index.php;
    root /var/www/mydirectory;

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

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

1 个答案:

答案 0 :(得分:1)

问题是你已经在重写目录的末尾添加了?,因此nginx告诉PHP提供不存在的http://yourdomain.com/stuff?/index.php

假设mysites.com是一个拼写错误并且您要重定向到同一个域,请尝试以下操作:

rewrite  ^/cat\.php\?id=(.*)$    /$1/    permanent;

使用rewritetry_files时存在很多问题,我有一个使用这些的工作配置,如:

我认为规则是rewrite规则必须在try_files之前,所以试试这个:

index index.php;
root /var/www/mydirectory;

location = / {
    rewrite  ^/cat\.php\?id=(.*)$    /$1/    permanent;
}

location ^(.*)$ {
    try_files $uri $uri/ /index.php?$1;
}

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