我很抱歉,如果之前已经提出这个问题,但我没有找到任何相关内容。
我正在构建一个单页应用。
我需要的是将用户名设置为URL的一部分而不是使用查询字符串。 现在我有以下结构:
http://www.myPageUrl.com/?user=username
因此,我从查询中获取用户名,然后提取有关此用户的所有数据。
我需要做什么:
http://www.myPageUrl.com/username
如何使用仅限客户端设置以下结构? 我没有使用任何库(只有jquery)。
谢谢!
答案 0 :(得分:1)
客户端只有这个是不可能的,你的新网址使得它看起来像/ username是一个文件夹,服务器没有(我假设)。如果您将自定义.htaccess和一些服务器端代码写入止血带文件夹名称并处理来自那里的响应,这可能是可行的,但对于纯客户端而言,这根本不可能。
万一我们完全不知道你想要完成什么,只是寻找一个重定向脚本,并且实际上每个用户都有文件夹结构,那么它只是一个简单的问题,即剥离查询值并进行重定向:
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
window.location.replace("http://example.com/"+getParameterByName('user'));
答案 1 :(得分:0)
如果您在后端使用任何类型的路由。如果没有其他路由匹配,则应将其配置为响应此请求。基本上,如果用户名不存在于数据库中,则应该给出404错误。
在客户端,您可以使用HTML 5的推送状态。
history.pushState(null, 'New title of page', 'Username');
答案 2 :(得分:0)
因此。我发现了怎么做。
也许有人需要它,所以我与你分享。
正如我所说,我需要它只在客户端完成。 所以我做了什么: 我更改为.htaccess文件,现在它看起来像:
<IfModule mod_rewrite.c>
RewriteEngine One
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
然后,非常简单。 使用javascript我做了以下:
var user=location.pathname.split('/')[3]
就是这样。非常简单。 感谢所有试图提供帮助的人。