Apache 使用htaccess更改浏览器中的URL而不重定向

Apache 使用htaccess更改浏览器中的URL而不重定向,apache,.htaccess,mod-rewrite,url-rewriting,friendly-url,Apache,.htaccess,Mod Rewrite,Url Rewriting,Friendly Url,我到处寻找合适的解决方案/方法,但似乎找不到任何对我有效的方法。 我甚至向朋友们求助,他们也帮了我的忙,但没有一个人得逞 我想做的是,更改浏览器中显示的URL,但仅此而已。(无需重新提取,页面重新加载)。 我想这样做是为了让我的UCP在浏览某些页面/文件时看起来更干净 我想要实现什么? 下面是一个配置文件示例,URL为: mysite.com/ucp/profile.php?player=Heartfire 但是,我希望它看起来像 mysite.com/ucp/profile/heartfir

我到处寻找合适的解决方案/方法,但似乎找不到任何对我有效的方法。 我甚至向朋友们求助,他们也帮了我的忙,但没有一个人得逞

我想做的是,更改浏览器中显示的URL,但仅此而已。(无需重新提取,页面重新加载)。 我想这样做是为了让我的UCP在浏览某些页面/文件时看起来更干净

我想要实现什么? 下面是一个配置文件示例,URL为:

mysite.com/ucp/profile.php?player=Heartfire
但是,我希望它看起来像

mysite.com/ucp/profile/heartfire
或者别的什么!我只想去掉.PHP之后的参数

我尝试过谷歌和这个网站的各种例子,但似乎都不起作用,请有人指导我如何实现这个结果

到目前为止我试过什么? 以下是我以前尝试过的几个例子:

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

那么,我做错了什么,它不工作了?

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

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

Htaccess和rewrite在服务器端。请求到达服务器,需要在服务器端重写,并且需要在客户端url栏中更改它

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

内部重定向可以模拟您所期望的请求,但对于客户端来说是透明的


顺便说一句,永久重定向是正确的解决方案,它可以通知用户,让他们知道资源已更改,并更新书签/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?$1=$2 [NC,L]

这就成功了(必须稍微编辑它以确保它不会让你回到主页)。但是,它似乎没有加载UCP的CSS。@Heartfire在
profile.php
文件中使用
元素。这就成功了!感谢所有的帮助,我会好好利用这些新学到的知识。