Apache 使用htaccess更改浏览器中的URL而不重定向
我到处寻找合适的解决方案/方法,但似乎找不到任何对我有效的方法。 我甚至向朋友们求助,他们也帮了我的忙,但没有一个人得逞 我想做的是,更改浏览器中显示的URL,但仅此而已。(无需重新提取,页面重新加载)。 我想这样做是为了让我的UCP在浏览某些页面/文件时看起来更干净 我想要实现什么? 下面是一个配置文件示例,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
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
文件中使用
元素。这就成功了!感谢所有的帮助,我会好好利用这些新学到的知识。