我有一个.htaccess文件,我用它来隐藏php扩展并为目录添加虚荣心。例如,用户个人资料页面将显示:
mydomain.com/usersname而不是mydomain.com?user=username
这与隐藏的.php扩展名一样正常,这对于错误页面或表单注册页面非常有用。例如
mydomain.com/errors/404.php将成为mydomain.com/errors/404
因此,为了获取用户配置文件,我在页面上使用了简单的$ _GET。是否可以在.htaccess文件中包含多个级别
所以而不是
#vanity on a directory
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
RewriteRule ^(.*)$ profile.php?user=$1 [NC]
要查找用户个人资料,可以执行此类操作以查看用户图像。
mydomain.com/username/images
#vanity on a directory
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
RewriteRule ^(.*)$ profile.php?user=$1&&page=$2 [NC]
第一种方法可以很好地获取我的用户个人资料但是当我在网址中添加任何其他内容时,我会得到这样的内容:
mydomain.com/username/images
数组([user] => username / images.php / images [page] =>)
我的完整.htaccess文件
RewriteEngine ON
#Error Handling
ErrorDocument 403 http://localhost/mysite/error/403
ErrorDocument 404 http://localhost/mysite/error/404
ErrorDocument 500 http://localhost/mysite/error/500
# hide php extentions
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC]
#vanity on a directory
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
RewriteRule ^(.*)$ profile.php?user=$1&&page=$2 [NC]
答案 0 :(得分:1)
将以下规则替换为:
#Remove .php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)/?$ $1.php [NC,L]
#vanity on a directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ profile.php?user=$1 [NC,L]
答案 1 :(得分:1)
Starkeen的回答解决了以下事实:您的代码在访问普通页面时访问用户配置文件时感到困惑。
将多个级别转换为多个GET变量的问题有以下解决方案:扩展正则表达式。例如,如果您需要两个级别,则可以将最后一行替换为:
RewriteRule ^([^\/.]*)\/([^\/.]*)\/?$ profile.php?user=$1&&image=$2 [NC,L]
这也允许使用像test_user / test_image /这样的尾部斜杠。如果用户可以输入可变数量的级别,则需要使用多个RewriteRules,从具有最多级别和下降的级别开始。像这样:
RewriteRule ^([^\/.]*)\/([^\/.]*)\/?$ profile.php?user=$1&&image=$2 [NC,L]
RewriteRule ^(.*)\/?$ profile.php?user=$1 [NC,L]
只要订单已知,您就可以轻松地将其扩展为任意数量的级别和变量。