У меня есть сайт, работающий на nginx.
в моем файле nginx / sites-available / default у меня есть строка:
rewrite ^(.*)$ /search.php?path=$1 break;
Это позволяет сделать examplesite.com перенаправленным на examplesite.com/search.php?path=$1 и затем замаскировать этот новый URL. Таким образом, URL-адрес выглядит как «examplesite.com» и работает как examplesite.com/search.php?path=$1.
Я хотел бы сделать что-то другое.
Я бы не хотел изменять функциональность examplesite.com, а вместо этого сделать URL-адрес examplesite.com/search.php?path=$1 таким, чтобы он отображался как examplesite.com/$1 и сохранил его прежнюю функциональность.
Поэтому я не хочу перенаправлять, просто сделайте examplesite.com/search.php?path=$1 как examplesite.com/$1
Но, похоже, что переписать не может справиться с этой функциональностью. Возможно ли иметь такую функциональность в nginx?
РЕДАКТИРОВАТЬ 1
Например:
У меня есть URL http://www.examplesite.com/search.php?search=house&место = чикаго
Я хотел бы сохранить функциональность, но просто сделать так, чтобы она выглядела так:
http://www.examplesite.com/chicago/house
РЕДАКТИРОВАТЬ 2
У меня есть код, который изменяется:
http://www.examplesite.com/search.php?search_title=apple&SEARCH_LOCATION = бостон
чтобы:
http://www.examplesite.com/boston/apple?search_title=apple&SEARCH_LOCATION = бостон
Это код:
if ($args ~* "search_title=[a-z]*&search_location=[a-z]*") {
rewrite ^/search.php?(.*)$ http://www.examplesite.com/$arg_search_location/$arg_search_title last;
}
Но проблема в том, что это приводит к сбою кода PHP на сайте, и он все равно отображает все параметры в конце.
РЕДАКТИРОВАТЬ 3
Посмотрев на это: https://serverfault.com/questions/160790/nginx-rewrite-for-an-url-with-parameters как предложено в комментариях, теперь я могу отобразить правильный URL:
http://www.examplesite.com/boston/apple
Добавляя? в конце, делая мой текущий код это:
if ($args ~* "search_title=[a-z]*&search_location=[a-z]*") {
rewrite ^/search.php?(.*)$ http://www.examplesite.com/$arg_search_location/$arg_search_title? last;
}
Но этот URL — это URL, который читает PHP. Итак, я получаю 404 Not Found, что имеет смысл.
Можно ли заставить PHP читать старый URL-адрес, но иметь URL-адрес в браузере, как сейчас?
РЕДАКТИРОВАТЬ 4
Я не уверен, но я думаю, что функция перезаписи nginx может быть неспособна делать то, что я хочу, поэтому я смотрю на proxy_pass и proxy_set_header
РЕДАКТИРОВАТЬ 5
У меня есть второй вопрос, который подходит к этой проблеме с другой стороны: URL перенаправления Nginx в URL PHP GET
Задача ещё не решена.
Других решений пока нет …