【问题标题】:Regex to allow all php files except one正则表达式允许除一个以外的所有 php 文件
【发布时间】:2011-02-22 06:43:13
【问题描述】:

我有这个允许所有 php 文件的正则表达式:

^.*\.([Pp][Hh][Pp])

如何排除特定文件,例如 test.php ?

感谢您的回答, 最好的问候

[编辑] 我没有说它是来自 htaccess 文件的 reg,/i 似乎不起作用,而 ?两者都不。 [编辑2] 目的是向经过身份验证的用户授予访问权限,但必须允许所有人使用的文件除外。 所以我已经完成了:

<Files ~ "^.*\.([Pp][Hh][Pp])$">
AuthUserFile /directory/.htpasswd
AuthGroupFile /dev/null
AuthName "Please log in ..."
AuthType Basic
require valid-user
</Files>

所以,所有的 php 文件都需要有效的用户。 test.php 说,我想为特定文件添加一个例外

【问题讨论】:

  • 代替[Pp],您可以使用不区分大小写的p。它会将正则表达式缩短为/^.*\.(php)/i
  • 这是一个mod-rewrite问题吗?您能否发布 a) 您正在尝试实现的目标和 b) 您迄今为止尝试过的代码。
  • 就是这样,提前感谢您的回答
  • Afair 应该可以在允许该文件之后添加另一个 块。不过不确定。 => ...

标签: regex .htaccess


【解决方案1】:

你可以使用negative lookahead:

^(?!test\.php$).*\.([Pp][Hh][Pp])$

最好使用不区分大小写的正则表达式,而不是为每个字母写 [Pp] 之类的东西。

"/^(?!test\.php$).*\.php$/i"

【讨论】:

  • 感谢您的回答,但我没有说它是来自 htaccess 文件的 reg,/i 似乎不起作用,而 ?两者都不。还有其他写法吗?
【解决方案2】:

在这种情况下实施非正则表达式检查不是更好吗?

更新:

只需为排除的文件添加第二个指令,如下所示:

<Files "test.php">
Satisfy Any
Allow from all
</Files>

这将使 test.php 可供所有用户使用。

【讨论】:

  • 也许,你会怎么做?
  • 你需要像这样添加第二个 指令: \n 满足任何\n 全部允许\n \n 通过这个 test.php所有人都可以使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 2014-09-28
  • 2010-10-16
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
相关资源
最近更新 更多