我创建了一个登录界面,用户可以在其中注册用户名。现在我想给每个用户一个虚荣网址,例如example.com/user。我正在使用.htaccess重写条件和php。一切都工作正常,除非我尝试像 example.com/chat/xx 这样的网址,它会显示一个带有“xx”id的个人资料页面。相反,它应该抛出404页面(这就是我想要的)。我希望虚荣网址仅在用户输入“example.com/user”而不是像“example.com/xyz/user”这样的子目录中时才有效。这可能吗?
htaccess -
RewriteEngine on
RewriteCond %{REQUEST_FILENAME}.php -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^([^\.]+)$ $1.php [NC]
RewriteCond %{REQUEST_FILENAME} >""
RewriteRule ^([^\.]+)$ profile.php?id=$1 [L]
Php使用 -
if(isset($_GET['id']))
// fetching user data and displaying it
else
header(location:index.php);
答案 0 :(得分:1)
然后,您必须匹配网址路径,而不必仅填充/
RewriteEngine on
RewriteRule ^/?([^/\.]+)$ profile.php?id=$1 [L]
这个正则表达式^([^\.]+)$
匹配所有而不是一个点.
,例如
但不匹配
这一个^/?([^/\.]+)$
的工作方式相同,但它也不允许使用斜杠/
。即它允许包含点.
或斜杠/
的所有内容(URL路径除外)。
有关Apache正则表达式的更多详细信息,请参阅Glossary - Regular Expression (Regex)和Rewrite Intro - Regular Expressions。