网址地址中的附加"/"如何在 html 中工作?(例如:http://stackoverflow.com/questions*/ask*)



我对htm ex中的"/"如何工作感到困惑:https://stackoverflow.com/questions/ask我有一个api,它会查找用户名。所以我想要的是一个搜索框当点击搜索时它会转到index。html/searchtext在jquery中它会获取"search"部分并将其转换为字符串

您可以通过

在JavaScript中获得页面的当前URL
var pathname = window.location.pathname; // Returns path only
var url      = window.location.href;     // Returns full URL

一旦你有了这些,你就可以使用jQuery或纯javascript来获得任何URL的最后一部分,或者在你的情况下搜索文本。

var url = 'http://www.website.com/index.html/searchtext'
var lastpart = url.split('/').reverse()[0];

魔力在web服务器,而不是你的代码。

这是通过url重定向或重写完成的。例如,如果你有一个像这样的api:

http://example.com/user?name=USERNAME

在Apache中,你会创建一个mod_rewrite规则:

RewriteRule  ^user/(.*)  user?name=$1

或者在lighttpd中创建一个ModRewrite规则:

url.rewrite-once = ( "^/user/(.*)" => "/user/$1" )

在一些语言中,如node.js或go, web应用程序通常被实现为web服务器。因为代码本身就是一个web服务器,你可以直接在路由器中指定重写规则。

例如,在node.js中使用express,我们可以这样写处理程序:

express.get('/user/:name',function(req,res) {
    var name = req.param('name'); // taken from the path
});

或者在go中,我们可以将路由写成:

router.GET("/user/:name", userHandler)

这可以在客户端完成吗?

简短回答:no.

长答案:当用户在地址栏输入url并按回车键时,就太晚了。你可以用.onbeforeunload拦截它,但是从.onbeforeunload重定向在大多数浏览器中都是不工作的。前提是你的页面是打开的。如果用户在空白页面中输入地址,你甚至无法拦截它。

为什么这需要在服务器端?好吧,首先,你的页面需要加载,以便你运行任何javascript(例如读取window.location)。为了加载,您需要http://example.com/user/slebetman的页面和http://example.com/user/armaiz的另一个页面等。但是如果你有了这些,你就不需要在客户端实现任何东西了。

相关内容

最新更新