我的意思是,所以我可以说我有一个用户页面:localhost/blog/profile/ImUser1
我希望为用户提供其他页面,例如:
localhost/blog/profile/ImUser1/my_subscribers
要么
localhost/blog/profile/ImUser1/my_posts
如何创建这类页面,例如订阅者页面?
我目前的.htaccess代码:
RewriteEngine On
CheckCaseOnly On
CheckSpelling On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^profile/(.*)$ /blog/profile.php?username=$1 [QSA,L]
这允许我进入用户页面。我需要在URL中使用用户名,因为这就是我如何提取订阅者的信息。
到目前为止,我的PHP结构如下:
if(isset($_GET['username']) === true && empty($_GET['username']) === false){
$username = $_GET['username'];
if(user_exists($username) === true){
echo 'Welcome to '.$username.' page!';
}
}else{
echo 'Please enter a username in the URL';
}
如何调整我的PHP和.htaccess以使其正常工作?
答案 0 :(得分:0)
您可以在profile.php的请求中添加额外的查询字符串变量,以指定模式。像这样:
RewriteRule ^profile/([a-zA-Z0-9_-]+)/?$ /blog/profile.php?username=$1 [L]
RewriteRule ^profile/([a-zA-Z0-9_-]+)/([a-z][a-z_]*)/?$ /blog/profile.php?username=$1&mode=$2 [L]
这样,对/blog/profile/some_user/some_mode
的请求会将请求发送到profile.php?username=some_user&mode=some_mode
,允许您的PHP脚本检查模式变量并呈现页面或相应地重定向页面。
我已将用户名模式从(.*)
更改为[a-zA-Z0-9_-]+
,以阻止它向前斜杠,并要求它至少为一个字符长度。我已经使用[a-z][a-z_]*
作为模式模式,要求它以小写字母开头,然后允许下划线。