CppCMS-Embedded 404

Я пытаюсь простой пример с CppCms, и я хотел бы выполнить все мои приложения относительно корня веб-приложения. Я не хочу выполнять приложение относительно пути к скрипту. Например, localhost: 8080 / script-path / относительный-путь-к-моему-приложению, и вместо этого я бы хотел, чтобы путь для моего приложения был бы следующим: localhost: 8080 / относительный-путь-к-моему-приложению. Я хотел бы выполнить это приложение, используя CppCMS-Embedded. Я пытаюсь супер простой пример, и у меня не было успеха. Все время пробую рут URL (HTTP: // локальный: 8080 /) Я получаю ошибку 404, как это:

Connection          close
Content-Encoding    gzip
Content-Type        text/html; charset=utf-8
Server              CppCMS-Embedded/1.1.0
X-Powered-By        CppCMS/1.1.0
status              404 Not Found
Accept              text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding     gzip, deflate
Accept-Language     en-US,en;q=0.5
Cache-Control       max-age=0
Connection          keep-alive
Cookie              _ga=GA1.1.541474771.1454701631
Host               localhost:8080
User-Agent         Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0

Ниже код и файлы конфигурации, которые я сделал:

main.cpp:

#include <cppcms/application.h>
#include <cppcms/applications_pool.h>
#include <cppcms/service.h>
#include <cppcms/http_response.h>
#include <cppcms/url_dispatcher.h>
#include <cppcms/url_mapper.h>
#include <iostream>
#include "content.h"class my_app : public cppcms::application{
public:
my_app(cppcms::service& s) : cppcms::application(s){
dispatcher().assign("",&my_app::well_come,this);
mapper().assign("");
mapper().root("");
}
void well_come(){
content::index ci;
ci.message = "Hello ";
render("index",ci);
}

};
int main(int argc,char ** argv){
try{
cppcms::service srv(argc,argv);
srv.applications_pool().mount(
cppcms::applications_factory<my_app>()
);
srv.run();
}catch(std::exception const & e){
std::cerr<<e.what()<<std::endl;
}
}

config.js:

{
"http" : {
"script" : "/mb.fcgi",
"rewrite" : [
{ "regex" : "/media(/.*)?", "pattern" : "$0" },
{ "regex" : ".*" , "pattern" : "/mb.fcgi$0" }
]
},
"service": {
"api":"http",
"port":8080
},
"views" : {
"paths" : [ "./" ],
"skins" : [ "my_app"],
},
}

index.tmpl

<% c++ #include "content.h" %>
<% skin my_app %>
<% view index uses content::index  %>
<% template render()%>
<html>
<body>
<h1><%= message %> World!</h1>
</body>
</html>
<% end template %>
<% end view %>
<% end skin %>

content.h

#include <cppcms/view.h>
namespace content{
struct index : public cppcms::base_content{
std::string message;
};
}

Чего мне не хватает в моих настройках? Почему CppCMS-Embedded не выполняет маршрутизацию для корня веб-приложения.
Благодарю.

1

Решение

После нескольких обсуждений в сообществе CppCms Артем Бейлис открыл мне этот вопрос.
Все время, что я просил корневой URL, как это http://domain.com/, Я получил ошибку 404 из-за того, что CppCms всегда ожидает, по крайней мере, какое-то отображение, которое не является пустым, например, «/» или любую другую строку, которая начинается с «/». Правильный путь — это всегда сопоставлять что-то, что начинается с «/».
Хорошее решение, предложенное Артёмом Бейлисом, заключается в том, чтобы переписать URL-адрес в той же форме, что и в учебном пособии: Как запустить приложение в корне веб-сервера. И добавьте непустое отображение, соответствующее URL-адресу по умолчанию, например:

 dispatcher().assign("/",&my_app::well_come,this);
mapper().assign("well_come","/");

Это решение работает довольно хорошо для меня =;)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]