使用htaccess

时间:2015-10-02 17:39:14

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

我到处寻找合适的解决方案/方法,但我似乎无法找到对我有用的任何东西。 我甚至问朋友,他们帮助但没有人占上风。

我要做的是,更改浏览器中显示的URL,但仅限于此。 (没有重定向,页面重新加载)。 我想这样做是为了让我的UCP在浏览某些页面/文件时更加清晰。

我想要实现的目标是什么? 下面是个人资料的示例,网址为:

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

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

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

您可以使用内部重定向,但不会更改您的网址,但会将您的请求映射为您想要的内容。

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

Htaccess和重写是在服务器端。请求到达服务器,需要在服务器端重写,您需要在客户端URL栏中更改它。

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

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

顺便说一句,永久重定向是这里的正确解决方案,用于通知用户并让他们知道资源已被更改并更新书签/ api /等。