正则表达式帮助^。* assets \ /.* \ / original。* \。* $

时间:2016-12-08 17:11:27

标签: regex apache .htaccess

我试图拒绝访问目录" assets / output / /"中所有原始文件名。含义" assets / output / 3342 / 45.jpg"将被允许​​和" assets / output / 3342 / orignal.jpg"会被禁止的。我已尝试将以下内容插入到我的apache2 / sites-avaliable / .conf中:

<Directory ^.*assets\/.*\/original.*\.*$>
AllowOverride All
order allow,deny
deny from all
</Directory>

此外,我尝试在/ assets /中的.htaccess文件中放置相似内容。不幸的是,我似乎有错误的REGEX。显然,这根据https://regex101.com起作用,但实际上并没有起作用。建议?谢谢。

2 个答案:

答案 0 :(得分:1)

Directory中不允许使用

Location.htaccess指令。如果您在共享主机上且无法在Apache / vhost配置中进行更改,则可以使用此规则来阻止对assets/output/.*/original的访问

RewriteEngine On

# comment below line if you want to block all URIs not just existing files
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^/?assets/output/.*/original(\..*)?$ - [F,NC]

上述规则将适用于Apache config和.htaccess。如果您需要访问权限,请更喜欢Apache配置。

答案 1 :(得分:0)

这里有一个逻辑问题。如果按照您的方式使用,<Directory ...>指令需要路径作为参数,而不是正则表达式。你可以在这样的上下文中使用正则表达式,但是你必须告诉 http服务器,所以在它前面添加一个波形符(~):

<Directory ~ "^/.*assets/.*/$">
  RewriteEngine on
  RewriteRule "^/.*assets/.*/original" "-" [F]
</Directory>

记录在案:http://httpd.apache.org/docs/current/mod/core.html#directory