在浏览器中更改 URL 而无需使用 htaccess 重定向

Change URL in browser without redirection with htaccess

我到处寻找合适的solution/method,但我似乎找不到任何适合我的东西。 我什至问过朋友,他们提供了帮助,但 none 占了上风。

我想做的是,更改浏览器中显示的 URL,但仅此而已。 (没有重定向,页面重新加载)。 我想这样做是为了让我的 UCP 在经历某些 pages/files.

时看起来更干净

我想达到什么目的? 这是配置文件中的示例,URL 将是:

mysite.com/ucp/profile.php?player=Heartfire

不过,我希望它看起来像

mysite.com/ucp/profile/heartfire

或者别的!我只想去掉 .PHP

之后的参数

我尝试了在 google 和这个网站上找到的各种示例,但 none 似乎有效,有人可以指导我实现结果。

到目前为止我尝试了什么? 以下是我之前尝试过的一些示例:

RewriteRule ^profile/([0-9]+)/?$    /ucp/profile.php?player=
RewriteRule profile.php?player= profile.php [NC,L]
RewriteRule ^profile$ profile.php?player=

所以我做错了什么它不起作用?

您可以使用内部重定向,这不会改变您的 url 但会根据需要映射您的请求。

你想要的是不可能的,因为:

Htaccess 和重写在服务器端。请求到达服务器,需要在服务器端重写,您需要在客户端更改它 url 吧。

为实现此目的,服务器应发送一个包含您所期望的 url 的重定向。这就是为什么重定向是强制性的。服务器无法重写客户端 urls,只能发送重定向响应。

内部重定向可以模拟你的请求是你所期望的,但它对客户端是透明的。

顺便说一句,永久重定向是通知用户并让他们有机会知道资源已更改并更新书签/api / 其他内容的正确解决方案。

将以下内容放入网站根目录下的 .htaccess 文件中:

RewriteEngine On

RewriteCond %{THE_REQUEST} ^GET\ /ucp/profile\.php?([^=]+)=(\S+) [NC]
RewriteRule ^ucp/profile\.php$ /ucp/%1/%2? [R=301,L,NC]

# Now, deal with internal rewrites (which will not cause redirection):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ucp/([^/]+)/([^/]+)/?$ /ucp/profile.php?= [NC,L]