2013-05-16 3 views
0

У меня есть сайт с URL-адреса, соответствующие PHP файлы:Перенаправление старый файл PHP на новый URL с помощью Nginx

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

Эти PHP-файлы не существуют больше, как я могу сделать 301 редирект (для SEO причина) в новом URL:

www.mysite.com/stuff 

Я попытался

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

Но это не работает, я получаю "нет входной файл, указанный".

Благодарим за помощь!

EDIT:

Подробнее о моей конфигурации (сайт работает на 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

http://webmasters.stackexchange.com/ –

ответ

1

Вопрос заключается в том, что вы добавили ? до конца вашего переписан каталога, так 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; 
} 
+0

Да, это была опечатка, я исправил ее – JuCachalot

+0

Это решение работает? Он должен взять все, что вы передаете 'id', и установить это как папку, так что' http: //domain.com/cat.php? Id = xyz' перенаправляет на 'http: // domain.com/xyz'. –

+0

@JuCachalot - Обновлено сообщение с правильным экранированием. –