В настоящее время я настраиваю машину для локальной разработки с помощью Vagrant. Все работает как надо, ожидайте, что параметры запроса не передаются в PHP на подстраницах.
Это значит на www.example.com/?a=b
, параметр запроса доступен, но www.example.com/subpage/?a=b
это не.
Общий ответ, который я нашел с помощью Google для этой проблемы, - это изменить try_files
директива, но это не работает для меня. Я также проверил request_order
& variables_order
в php.ini
- там все правильно настроено.
Это мой конфиг:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/public;
location / {
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$query_string;
include /etc/nginx/fastcgi_params;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
}
sendfile off;
}
Поскольку я не очень разбираюсь в настройке и администрировании серверов, я наткнулся на кирпичную стену, но вот несколько вещей, которые я также проверил:
$query_string
установлен в /etc/nginx/fastcgi_params
так как fastcgi_param QUERY_STRING $query_string;
что мне кажется правильным.fastcgi_params
правильноПоскольку он работает, когда не на подстранице, я теперь подозреваю, что блоки местоположения не совпадают, но я действительно не понимаю, как это могло быть - пожалуйста, помогите.
Вам нужно использовать $ is_args для вопросительного знака и $ args или $ query_string для строки запроса после вопросительного знака.
вот последняя комбинация.
try_files $uri $uri/ /index.php$is_args$query_string;
Также убедитесь, что вы установили
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
затем передайте его fastcgi;
fastcgi_pass 127.0.0.1:9000;
Строка запроса начинается с вопросительного знака.
Затем установите во втором блоке:
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
удалять include /etc/nginx/fastcgi_params;
в первом блоке, так как у вас нет fastcgi_pass
директива здесь.