-1

我的 htaccess 文件是

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ first.php

它的工作很好。但我希望这种情况不适用于 .php 扩展文件,例如我的 url 是

www.example.com/ or 
www.example.com/index.php or 
www.example.com/admin/page.php 
www.example.com/admin

然后它首先打开.php 如果 www.example.com/style.css 然后打开 style.css 文件,或者如果 www.example.com/image.jpg 然后打开 image.jpg 文件

4

3 回答 3

3

.php在检查文件存在后,您应该使用 [OR] 和您的条件来匹配。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule ^(.*)$ first.php
于 2013-09-26T02:57:32.247 回答
2

如果你想从你的 Apache 重写中跳过所有 php 文件,你应该在你的 RewriteRule 之前添加以下 RewriteCond。

RewriteCond %{REQUEST_FILENAME} !\.php$

此重写条件检查请求的文件名是否不以“.php”结尾。完整的规则集如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.php$
RewriteRule ^(.*)$ first.php
  1. 检查请求的文件名是否不是目录。
  2. 检查请求的文件名是否不是文件。
  3. 检查请求的文件名是否不以“.php”结尾。

如果您想将针对不存在的 .php 文件的攻击记录到您的 Apache 日志中,而不是将它们转发到您的 first.php,这可能会有所帮助,例如通过 fail2ban 启动禁止操作。我使用类似的设置来保护 Wordpress 实例不被脚本小子扫描。

于 2018-02-11T21:10:30.583 回答
1
   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^([^\.]+)$ $1.php [NC,L]

如果你想重写 HTML 使用这个

   RewriteRule ^([^\.]+)$ $1.html[NC,L]
于 2018-05-25T09:52:51.420 回答