Php 防止拾取文件夹

Php 防止拾取文件夹,php,regex,.htaccess,url,Php,Regex,.htaccess,Url,所以我有一个网站,我正试图实现像Twitter这样的URL。这是我的密码 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?u

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

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
/forget
,当我访问它们时,它们会被当作用户。因此,我所做的是将我不希望htaccess获取的每个页面放在一个文件夹中,比如
signup
,其中包含注册页面的
index.php
。但htaccess仍然将其视为用户名。所以我的问题是我如何解决这个问题?我想“阻止”某些链接(文件夹)被算作用户

我知道

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
适用于文件,但有适用于文件夹的吗

试试这个

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

-f
已经完成了您想要的操作。问题是您有两个规则条件应用于一个规则。

因此,第二条规则甚至适用于存在的文件夹

这将把规则合并为一个规则

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

这并不能修复那些阻止
的糟糕规则-f
无法工作…OP需要一种防止应用文件夹的方法。我认为这是可行的。但是你的回答提供了更多的细节,这很好@zx81