在浏览器中更改 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]
我到处寻找合适的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]