拒绝使用get参数

时间:2017-01-28 16:10:39

标签: php .htaccess

我想拒绝直接访问所有文件,只有一个: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,则上述文件代码无效。如何解决这个问题?

2 个答案:

答案 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>

谢谢大家!