防止拾取文件夹

时间:2014-07-03 22:03:45

标签: php regex .htaccess url

所以我有一个网站,我试图实现像Twitter这样的网址。这是我的代码

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1

这个问题是我有/signup/forgot这样的网页,当我转到它们时,它们会被用作用户。所以我所做的就是把每一页我都不希望htaccess在signup这样的文件夹中提取,并且包含index.php用于注册页面。但是htaccess仍将其视为用户名。所以我的问题是如何解决这个问题?我想"阻止"某些链接(文件夹)不被计为用户。

我知道

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

适用于文件,但文件夹有吗?

2 个答案:

答案 0 :(得分:1)

!-f已经做了你想要的。问题是您有两个规则条件适用于单个规则。

因此,第二条规则即使对于存在的文件夹也会被应用。

这将规则合并为一条规则。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w-]+)/?$ profile.php?username=$1
  • 如果文件名是现有文件夹或文件,则!-f!-d条件将失败,并且该规则将不适用。像signup这样的现有文件夹不会被重写。
  • 规则中的/?使/成为可选项,并结合两种情况。
  • \w可以匹配字母,数字和下划线

答案 1 :(得分:0)

试试这个

RewriteRule ^(signup|forgot)($|/) - [L]