如何停止域中子目录的虚荣URL

时间:2013-03-05 16:01:38

标签: php .htaccess vanity-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);

1 个答案:

答案 0 :(得分:1)

然后,您必须匹配网址路径,而不必仅填充/

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

这个正则表达式^([^\.]+)$匹配所有而不是一个点.,例如

  • 一个
  • BCD
  • 你好/如何/是/你
  • 聊天/ XX

但不匹配

  • test.php的
  • hello.world
  • 聊天/ xx.bar

这一个^/?([^/\.]+)$的工作方式相同,但它也不允许使用斜杠/。即它允许包含点.或斜杠/的所有内容(URL路径除外)。

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