Nginx перезаписать индекс.php? страница = контакт, чтобы просто связаться

#nginx

#nginx

Вопрос:

У меня возникли проблемы с этим. Я хочу, чтобы URL-адрес был переписан из «index.php?page=somepage» для записи в «somepage».

Вот как это было в .htaccess, если это поможет

 RewriteEngine on
RewriteRule ^(w )$ index.php?page=$1 [L,NC,QSA]
RewriteRule ^(w ) /$ index.php?page=$1 [L,NC,QSA]
  

Серверный блок:

 server {
        listen 80;
        listen [::]:80;
        server_name domain.com;

        root /home/www/domain.com;

        index index.php index.html index.htm;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ .php$ {
                try_files $uri =404;
                rewrite ^/(w )$ /index.php?page=$1 last;
                rewrite ^/(w ) /$ /index.php?page=$1 last;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;

        }
}
  

Комментарии:

1. Пожалуйста, предоставьте весь свой server блок. Если посмотреть на комментарий к вопросу ниже, я бы предположил, что происходит что-то еще.

2. @JoeDoherty добавил серверный блок к вопросу.

3. не переписывайте, это все равно будет работать, попробуйте удалить две команды перезаписи в блоке php.

4. @Satys Я не хочу, чтобы это было index.php?page=contact , а скорее contact

5. вы имеете в виду /index.php?страница=контакт, чтобы /contact и должно ли это отображаться пользователям, например, в браузере, или выполняться внутри?

Ответ №1:

Пожалуйста, попробуйте следующий код,

 server {
   ...
   rewrite ^/index.php?page=(.*) /$1 permanent;
   ...
   location ~ /(.*) {
      try_files $uri $uri/ /index.php?page=$1;
   }

   location ~ .php {
      ...
      try_files $uri =404;
      fastcgi_pass unix:/var/run/php5-fpm.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
      ...
   }
   ...
}
  

Комментарии:

1. Это почти работает. Мне также нужно получить фактическое значение из параметра страницы. В настоящее время использую $_GET и получаю пустой массив.

2. Дальнейшая проверка, вы уверены, что правило перезаписи не должно быть отменено? Так что URL /contact -адреса обрабатываются так index.php?page=contact , чтобы пользователь действительно видел /contact ?

Ответ №2:

Пробовал использовать .htaccess в конвертер nginx, и этот фрагмент кода, похоже, работает:

 rewrite ^/(w )$ /index.php?page=$1 last;
rewrite ^/(w ) /$ /index.php?page=$1 last;
  

Редактировать: я слишком усложнил ситуацию, думая о перезаписях. Решение того, что я пытался сделать, заключается в следующем:

 location / {
    try_files $uri $uri/ /index.php?page=$uri;
}