【问题标题】:Change URL in browser without redirection with htaccess在浏览器中更改 URL 而无需使用 htaccess 进行重定向
【发布时间】:2015-12-30 23:55:59
【问题描述】:

我到处寻找合适的解决方案/方法,但似乎找不到任何适合我的东西。 我什至问过朋友,他们都帮忙了,但都没有成功。

我想要做的是,更改浏览器中显示的 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

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

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting friendly-url


    【解决方案1】:

    将以下内容放入网站根目录内的.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 文件中使用<base> 元素。
    • 成功了!感谢所有的帮助,我会好好利用这些新获得的知识。
    【解决方案2】:

    您可以使用内部重定向,这不会更改您的网址,而是根据需要映射您的请求。

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

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

    为了达到这个目的,服务器应该发送一个带有你期望的 URL 的重定向。这就是为什么重定向是强制性的。服务器不能重写客户端的url,只能发送重定向响应。

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      相关资源
      最近更新 更多