我正在建立一个拥有众多用户的社交网站。因此,我需要一种更简单,更简单的方法来访问任何用户页面。假设我以Freddy身份登录,如果我转到Freddy的个人资料页面,该网址会说:http://localhost/profile_page.php
。如果从此页面开始,我想转到Alice的个人资料页面,我只需修改网址并输入http://localhost/profile_page.php/alice
,而不是写http://localhost/profile_page.php?u=alice
。
我创建了一个.htaccess文件,我已经从Wamp中的Apache模块启用了rewrite_module
。但是,页面未正确加载。再次,假设我以Freddy身份登录,配置文件页面加载完美,但是当我编辑url去另一个用户页面时,即http://localhost/profile_page.php/Alice
(谁是真实用户,所以我希望它转到Alice的个人资料页面),它不会按照CSS的指示呈现页面,也会保留在Freddy的个人资料页面上。
的.htaccess :
RewriteBase /www/
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?u=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?u=$1
答案 0 :(得分:1)
好吧,你的规则不考虑这里的php文件(检查我是否在规则中的所有regexp之前添加了斜杠):
RewriteBase /www/
RewriteEngine On
RewriteRule ^/([a-zA-Z0-9_-]+)$ profile.php?u=$1
RewriteRule ^/([a-zA-Z0-9_-]+)/$ profile.php?u=$1
使用这段代码,http://localhost/profile_page.php?u=alice永远不会匹配。 ^([a-zA-Z0-9_-]+)/$
仅匹配字母,数字和下划线,因此例如问号无法匹配。
试试这个(假设不是profile.php,而是指profile_page.php
RewriteBase /www/
RewriteEngine On
RewriteRule ^/profile_page.php/([a-zA-Z0-9_-]+)$ profile_page.php?u=$1
RewriteRule ^/profile_page.php/([a-zA-Z0-9_-]+)/$ profile_page.php?u=$1
另一项改进。您只能在一个表达式中设置两个表达式。
RewriteBase /www/
RewriteEngine On
RewriteRule ^profile_page.php/([a-zA-Z0-9_-]+)/?$ profile_page.php?u=$1
我强烈建议你在这里删除profile_page.php以增加网址的可读性(我知道你的格式可能在你的规范中)。
RewriteBase /www/
RewriteEngine On
RewriteRule ^/profile_page.php/([a-zA-Z0-9_-]+)/?$ profile_page.php?u=$1
RewriteRule ^/profile/([a-zA-Z0-9_-]+)/?$ profile_page.php?u=$1
RewriteRule ^/([a-zA-Z0-9_-]+)/?$ profile_page.php?u=$1
在这种情况下,您将能够匹配这些网址 * http://localhost.com/alice * http://localhost:com/profile/alice * http://localhost.com/profile_page.php/alice
为了能够匹配您自己的个人资料,请确保您也启用了一些路线,例如:
RewriteBase /www/
RewriteEngine On
RewriteRule ^/?$ profile_page.php
RewriteRule ^/me?$ profile_page.php
RewriteRule ^/profile_page.php/([a-zA-Z0-9_-]+)/?$ profile_page.php?u=$1
RewriteRule ^/profile/([a-zA-Z0-9_-]+)/?$ profile_page.php?u=$1
RewriteRule ^/([a-zA-Z0-9_-]+)/?$ profile_page.php?u=$1
检查订单是否重要。第一个匹配,第一个应用。在那种情况下,我使用了相同的端点文件。检查$ _GET [' u']是否已设置为加载指定用户或会话中的用户。
我强烈建议您使用某种前端控制器,以便能够管理给定一个类(例如app.php)的所有路由,例如Symfony或任何现代PHP框架。