0

我创建了一个登录界面,用户可以在那里注册用户名。现在我想给每个用户一个虚 URL,比如 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);
4

1 回答 1

1

然后你必须匹配一个没有斜杠的 URL/路径

RewriteEngine on
RewriteRule ^/?([^/\.]+)$ profile.php?id=$1 [L]

此正则表达式^([^\.]+)$匹配所有带点的内容.,例如

  • 一种
  • bcd
  • 你好吗
  • 聊天/xx

但它不匹配

  • 测试.php
  • 你好世界
  • 聊天/xx.bar

这个^/?([^/\.]+)$工作原理相同,除了它也不允许斜线/。即它允许所有内容,除了 URL 路径,包含点.或斜线/

有关 Apache 正则表达式的更多详细信息,请参阅词汇表 - 正则表达式 (Regex)Rewrite Intro - 正则表达式

于 2013-03-05T16:53:09.200 回答