我想拒绝直接访问所有文件,只有一个:go.php
。
我已经阅读了this个问题,但在我的情况下它不起作用,因为我还发送了一个GET参数。
这意味着除了尝试转到www.domain.com/go.php?code=xyz123
时,所有文件都应该被拒绝。
我的代码现在:
Order Allow,Deny
deny from all
allow from [my IP here]
<FilesMatch "go.php">
Allow from all
</FilesMatch>
我该如何解决?
谢谢!
编辑1
我将代码更新为:
<Files go.php>
Allow from all
</Files>
现在它确实允许网址为domain.com/go.php?code=123
。问题是我使用漂亮的URL和重写条件:
RewriteRule ^go/([a-z0-9]+)$ /go.php?code=$1
RewriteRule ^go/([a-z0-9]+)/$ /go.php?code=$1
因此,如果网址为domain.com/go/123
,则上述文件代码无效。如何解决这个问题?
答案 0 :(得分:1)
由于这只是一个特定文件,因此您不需要FilesMatch
,但可以使用Files
代替
<Files go.php>
...
</Files>
从/go/123
重写为/go.php?code=123
是一个经典之作。您捕获查询字符串的部分并在替换中使用它
RewriteRule ^go/(.+)$ /go.php?code=$1 [L]
我不希望<Files go>
或<FilesMatch go>
工作,因为&#34; / go / 123&#34;严格来说,它不是一个文件。
所以尽管我无知还有其他的
<Files go>
Allow from all
</Files>
作品。
作为替代方案,您可以使用If
并检查所请求的网址路径
<If "%{REQUEST_URI} =~ m,^/go/,">
Allow from all
</If>
答案 1 :(得分:0)
问题解决了:
<FilesMatch "go|go.php">
Allow from all
</FilesMatch>
谢谢大家!