Javascript 没有mod_重写的用户友好链接行为

Javascript 没有mod_重写的用户友好链接行为,javascript,php,html,apache,Javascript,Php,Html,Apache,我想建立用户友好的链接(例如:),但当用户点击http://www.website.com/post-id/changed-post-title-by-user“应立即将地址替换为,无需重定向到”http://www.website.com/post-id/post-title其中“帖子标题”是ID等于“帖子ID”的帖子标题就像StackOverFlow链接的行为一样。我知道推送历史状态API: history.pushState(state, title [, url]) 但这种方法需要启用

我想建立用户友好的链接(例如:),但当用户点击http://www.website.com/post-id/changed-post-title-by-user“应立即将地址替换为,无需重定向到”http://www.website.com/post-id/post-title其中“帖子标题”是ID等于“帖子ID”的帖子标题就像StackOverFlow链接的行为一样。我知道推送历史状态API:

history.pushState(state, title [, url])
但这种方法需要启用Javascript,有些网站(如StackOverFlow方法)需要禁用JS。 我在“index.php”中处理的链接如下:

$requestURI = explode('/', $_SERVER['REQUEST_URI']);
$command = array_values($requestURI);

if(condition)
{
  include('page.php');
}

您所观察到的行为是一个正在运行的服务器重定向。你打字的时候

https://stackoverflow.com/questions/65451745/whatever
服务器收到该请求并发出
301
状态代码(永久移动重定向)

重定向的位置是
/questions/65451745/用户友好链接行为,无需mod rewrite
,如下面的响应标题所示:

accept-ranges: bytes
cache-control: private
content-security-policy: upgrade-insecure-requests; frame-ancestors 'self' https://stackexchange.com
date: Sat, 26 Dec 2020 02:50:42 GMT
feature-policy: microphone 'none'; speaker 'none'
location: /questions/65451745/user-friendly-links-behavior-without-mod-rewrite
server: Microsoft-IIS/10.0
vary: Fastly-SSL
via: 1.1 varnish
x-account-id: 2441033
x-aspnet-duration-ms: 1
x-cache: MISS
x-cache-hits: 0
x-dns-prefetch-control: off
x-flags: AA
x-frame-options: SAMEORIGIN
x-is-crawler: 0
x-providence-cookie: 372ce5a1-ff98-0aae-7962-a68742f9dfee
x-request-guid: f5cc8c0f-2ac7-427c-8f1f-aa007566d70f
x-route-name: Questions/Show
x-served-by: cache-mdw17325-MDW
x-sql-count: 2
x-sql-duration-ms: 1
x-timer: S1608951042.245905,VS0,VE26

长话短说,如果你想在“飞行”中更改url,重定向是唯一的方法。而且它不是用php或html完成的;它是一种服务器功能。

本质上,您的意思是希望重定向而不使用重定向。祝你好运。。。更改浏览器中显示的url的唯一方法是使用push状态直接重定向或操作它。FWIW,重定向是友好URL的工作方式。@TimMorton获取我问题的链接“您可以更改最后一部分“用户友好链接行为,而无需修改重写”无论你想要什么,链接都会立即更改为当前链接,而无需重定向,即使你禁用了javascript,推送状态是基于哪个。我一直在试图弄清楚你在说什么机制:什么改变了链接,在什么事件上?你是说当你输入url a时,按enter键后它会显示为url b?@TimMorton此链接“”将显示正确的帖子,但地址栏将显示此链接“”,那么我如何才能使它在Apache中工作?我已经很久没有在Apache中设置它了。我能做的就是给你指出正确的方向。关键是,即使使用mod_rewrite,服务器(Apache或IIS)如何重定向到具有正确帖子标题(链接的最后一部分)的链接?这需要一个数据库连接!一种可能的情况是:所有通过index.php路由的请求都会解析url(mod rewrite可能会将路径添加为查询字符串)、验证、查找链接最后一部分的值(如果无效),并发出301重定向到正确地址。如果地址正确,它只需路由到适当的控制器、模型和视图。(或者对于非mvc,包括适当的脚本)正如您所指出的,他们必须点击数据库才能获得标题。一次数据库调用根本不是什么大事;查找url段塞的概念。如果提供的slug!=查找段塞,重定向到查找的段塞。如果匹配,加载匹配的控制器等。
accept-ranges: bytes
cache-control: private
content-security-policy: upgrade-insecure-requests; frame-ancestors 'self' https://stackexchange.com
date: Sat, 26 Dec 2020 02:50:42 GMT
feature-policy: microphone 'none'; speaker 'none'
location: /questions/65451745/user-friendly-links-behavior-without-mod-rewrite
server: Microsoft-IIS/10.0
vary: Fastly-SSL
via: 1.1 varnish
x-account-id: 2441033
x-aspnet-duration-ms: 1
x-cache: MISS
x-cache-hits: 0
x-dns-prefetch-control: off
x-flags: AA
x-frame-options: SAMEORIGIN
x-is-crawler: 0
x-providence-cookie: 372ce5a1-ff98-0aae-7962-a68742f9dfee
x-request-guid: f5cc8c0f-2ac7-427c-8f1f-aa007566d70f
x-route-name: Questions/Show
x-served-by: cache-mdw17325-MDW
x-sql-count: 2
x-sql-duration-ms: 1
x-timer: S1608951042.245905,VS0,VE26