1

PHP ファイルに対応する URL を持つ Web サイトがあります。

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

問題は、書き換えられたディレクトリの最後に a を追加したことです。?そのため、nginx は PHP にhttp://yourdomain.com/stuff?/index.php存在しないものを提供するように指示しています。

mysites.comタイプミスがあり、同じドメインにリダイレクトしていると仮定して、これを試してください:

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

rewriteと を一緒に使用することには多くの問題がありますtry_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 に答える