我有一个在OpenShift上运行的非常简单的Node.js博客系统。当它读取博客条目的元数据时,它会在通过encodeURIComponent
后保存标题。然后将该百分比编码的字符串用作URL中的后“密钥”。
例如:
my-blog.io/post/post%2Fwith%2Fslahes
我正在使用Express,首先我注意到Express在传递给我的应用程序之前解码了URL字符串(也就是说,我的代码在请求参数中找到字符串"post/with/slashes"
)。所以我在查找帖子之前再次通过encodeURIComponent传递它。我不认为这是相关的,但我已经提到它以防万一。
我的问题:当我运行本地实例(这是“独立的”Node.js,没有Apache继续)时,这很好用。 Express传递给我"post/with/slashes"
,我将该字符串传递给encodeURIComponent
,然后我查看帖子。但是当我部署到OpenShift时,请求根本无法到达我的应用程序。我服务于OpenShift的默认404页面,其中显示“在此服务器上找不到请求的URL /帖子/帖子/带/ slashes。”
总结:在将传递给Node.js之前,Apache似乎正在解码百分比编码的网址。由于URL中现在有斜杠,因此Express不知道如何将请求路由到我的应用程序。这是预期的(如果是这样的话)?如果没有,为什么会发生这种情况,我该怎么办呢?