让用户查询www.example.com/parameter并使用该参数而不更改网址栏中的网址

时间:2017-02-05 11:48:38

标签: php apache .htaccess url mod-rewrite

所以基本上我有一个包含用户个人资料的网站。我希望用户能够查询这样的配置文件: www.example.com/john

这将触发我用PHP编写的另一个页面来显示该配置文件,但没有更改网址。我已经看过SO上的其他例子了: How do I achieve a url like www.example.com/username to redirect to www.example.com/user/profile.php?uid=10?

然而,这使用url重写,这意味着URL会随之改变。对于instnace,如果页面名为users.php,我不希望发生这种情况: 用户查询www.examples.com/john - >页面已更改为www.examples.com/users.php?name=John

我希望网址保留为www.examples.com/john,但服务器需要提供www.examples.com/users.php?name=John

即使我不想在网址栏中更改网址,我仍然会使用网址重写来实现这一目标吗?希望有人能提供帮助,谢谢!

3 个答案:

答案 0 :(得分:1)

通常谁需要这种功能使用路由器。

  

路由是获取URI端点(位于基本URL之后的URI的一部分)并将其分解为参数以确定该控制器的哪个模块,控制器和操作应该接收请求的过程。

基本上你可以把你的网址划分为参数。它与输入网址的响应。 php中有一些很好的库可以让你处理路由器,例如:

在phroute中,您可以通过以下方式解决问题:

$router->get(['/user/{name}', 'username'], function($name){
    //retrieve $name information
    return 'Hello ' . $name;
})

仅供参考,每个MVC框架都使用路由器作为标准。

答案 1 :(得分:0)

使用.htaccess文件

RewriteEngine on
RewriteRule ^/([a-zA-Z0-9])$ /users.php?name=$1

我希望这会解决您的问题,现在它会做什么,在前面或公共网址上就像http://www.example.com/john但服务器上的users.php脚本将收到一个GET参数名称有值约翰。

确保打开apache mod_rewrite。

答案 2 :(得分:0)

使用Apache的重写模块,您可以进行重写或重定向。

重定向意味着,向客户端发送响应(状态代码301,302)并要求获取另一个URL。这会导致浏览器的URL栏更改为新URL。当您将R|redirect标志添加到规则时,例如

,就会发生这种情况
RewriteRule ^foo$ /bar.html [R,L]

或目标是包含域的绝对URL,例如

RewriteRule ^foo$ http://www.example.com/bar.html [L]

另一方面重写,意味着接受请求并以某种方式发送答案,而不将客户端重定向到另一个资源。

RewriteRule ^foo$ /bar.html [L]

这次,客户端要求foo,但是服务器在不告知客户端的情况下发送bar.html的内容。

因此,只要您不添加R标志或提供绝对URL,客户端的URL栏就不会改变,例如。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^john$ /users.php?name=john [L]

或更一般

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /users.php?name=$1 [L]