1

我有一个网站,其 URL 对应于 PHP 文件:

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

这些 PHP 文件不再存在,我怎样才能对新 URL 进行 301 重定向(出于 SEO 原因):

 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;
    }
4

1 回答 1

2

问题是您在?重写目录的末尾添加了一个,因此 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;
}
于 2013-05-16T16:03:28.347 回答