Я бы хотел, чтобы nginx обработал:
http://dev.mydomain.com/about-us так как
http://dev.mydomain.com/index.cfm/about-us
При загрузке файла index.cfm Nginx также должен передавать "cgi path info" (/ about-us) для обработки на сервере. Я очень близок, но вижу некоторые неожиданные результаты.
Вот моя текущая конфигурация nginx:
server {
listen 80 default_server;
server_name _;
index index.cfm index.html index.htm;
root /var/www;
server_name_in_redirect off;
set $path_info $request_uri;
try_files $uri /index.cfm$args;
location ~* \.(cfm|cfc|cfr)$ {
proxy_pass http://127.0.0.1:8888;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header XAJP-PATH-INFO $path_info;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
Это правильная маршрутизация к index.cfm, если index.cfm не указан в URL-адресе (например, в приведенном выше примере "about-us"). Однако я считаю странным то, что явные запросы на index.cfm, такие как http://dev.mydomain.com/index.cfm на самом деле предлагать пользователю загрузить файл (например, сервер не знает, как его обрабатывать).
Если я вас правильно понял, вы можете попробовать следующие настройки
server {
listen 8989;
server_name localhost;
index index.html;
location / {
return 301 $scheme://$http_host/index.cfm$uri;
}
location ~ /index.cfm {
root /vhosts/default;
}
}
Некоторые базовые проверки
# curl -I http://localhost:8989/
HTTP/1.1 301 Moved Permanently
Server: nginx/1.8.0
Date: Sat, 20 Feb 2016 01:40:29 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://localhost:8989/index.cfm/
# curl -I http://localhost:8989/index.cfm/
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Sat, 20 Feb 2016 01:40:37 GMT
Content-Type: text/html
Content-Length: 65
Last-Modified: Fri, 19 Feb 2016 23:27:42 GMT
Connection: keep-alive
ETag: "56c7a4ee-41"
Accept-Ranges: bytes
# curl -I http://localhost:8989/test.html
HTTP/1.1 301 Moved Permanently
Server: nginx/1.8.0
Date: Sat, 20 Feb 2016 01:40:55 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://localhost:8989/index.cfm/test.html
# curl -I http://localhost:8989/index.cfm/test.html
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Sat, 20 Feb 2016 01:41:05 GMT
Content-Type: text/html
Content-Length: 64
Last-Modified: Fri, 19 Feb 2016 23:27:36 GMT
Connection: keep-alive
ETag: "56c7a4e8-40"
Accept-Ranges: bytes
# curl -I http://localhost:8989/non_exist_file.html
HTTP/1.1 301 Moved Permanently
Server: nginx/1.8.0
Date: Sat, 20 Feb 2016 01:42:56 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://localhost:8989/index.cfm/non_exist_file.html
# curl -I http://localhost:8989/index.cfm/non_exist_file.html
HTTP/1.1 404 Not Found
Server: nginx/1.8.0
Date: Sat, 20 Feb 2016 01:43:05 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive
Я бы предпочел не делать никаких фактических перенаправлений, а просто «переписывать».
Я бы порекомендовал прочитать следующие темы
В большинстве случаев предпочтительнее возврат.
Ты на правильном пути с try_files
. Но вы хотите добавить полный URL-путь, а не строку запроса, как вы это делали. Например:
try_files $uri /index.cfm$uri;