Haccess重写规则和条件



我已经开始了另一个个人使用的小项目,我正在设置我的web根htaccess文件。我已经很久没有碰这个东西了,所以我对它有一些问题。

我将展示一些我想做的事情的例子,因为我不知道如何很好地解释它。我的webroot包含:

/index.php

/test/test.txt

如果url是example.com/home,它应该输出example.com/index.php?page=主页。这很容易做到,我对此没有任何问题。问题从现有文件开始。如果url是example.com/test或example.com/test/test.txt,我希望它输出example.com/index.php?file=test还是example.com/index.php?file=test/test.txt以下是我的htaccess文件中的条件和规则(这些仅适用于现有文件(:

RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ - [S=1]
RewriteRule ^(.*?)$ /index.php?file=$1 [L,QSA]

然而,当我输入example.com/test时,它会直接进入目录"测试";example.com/test.txt也是如此-只是显示文件。

首先,这样做可以吗?如果是这样,我该如何做到这一点?提前感谢!

附言:我如何记录重写规则的处理过程?我发现我可以通过在httpd.conf中修改LogLevel来做到这一点。我将其设置为LogLevel alert-rewrite:trace6,但错误日志似乎不包含我需要的日志。

您已经问了多个问题,所以这是部分答案。

防止目录列表

对于任何没有index.php.html的文件夹,如果您不希望列出内容,请在该文件夹中创建一个.htaccess文件,其中包含选项-索引

防止文件执行

对于任何有文件可供参考(不打算执行或显示(的文件夹,请将权限更改为750它们仍然可以包含或引用服务器端。

最新更新