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