RewriteRule 在 SSL 访问日志中创建 404

RewriteRule creates 404 in SSL access log

我想买一些漂亮的 URL。我想使用
https://sub.domain.edu/fs/7356

https://sub.domain.edu/fs/index.php?ind=7356

我的这个目录的 .htaccess 是:
RewriteEngine On RewriteBase /fs/ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?ind= [L,QSA]

该页面在浏览器中运行良好。 PHP 脚本有效。一切看起来都很棒。但是 ssl_access_log 将每个页面访问显示为 404。

"GET /fs/7356 HTTP/1.1" 404 9241

除非 logwatch 将所有这些 404 标记为可能的恶意探测,否则这只会有点烦人。每天早上我都会收到一封电子邮件,说有数十个 IP 试图探测该站点。我尝试将 R=301 添加到 RewriteRule,但它会完全重定向到我试图避免的完整 URL。

我必须制作自定义日志格式。在 /etc/httpd/conf.d/ssl.conf 中,我注释掉了创建 ssl_acess-log 文件的条目,并将其替换为 LogFormat 和 Customlog 指令。

#TransferLog logs/ssl_access_log LogFormat "%h %l %u %t \"%r\" %s %b" logwatchfix CustomLog logs/ssl_access_log logwatchfix

http://httpd.apache.org/docs/current/mod/mod_log_config.html

这导致与原始输出几乎相同的输出,唯一的例外是“%>s”替换为“%s”。它的工作方式与我对文档的理解相反。

"%s 状态。对于内部重定向的请求,这是原始请求的状态。使用 %>s 作为最终状态。"

我原以为 "status of the original request" 会是“404”,而 .htaccess 重定向后的 "final status" 会是“200” 实际上,在我的例子中,它的作用恰恰相反。我还在以相同方式工作的其他目录中放置了类似的 .htaccess 文件。我在 httpd.conf 文件中将目录索引设置为 index.php 而不是 index.html,但似乎没有什么区别。