如果 URL 不存在,我正在尝试将目录中的文件重定向到 CGI,并在其中进一步处理 URL。由于这也会对 HTML 文档中引用的不存在文件产生影响,因此如果 HTML 文档包含大量不存在的引用(imgs、css 文件、js 文件),则它可以触发整个级联的重定向。当然,在理想的世界中,所有这些都应该存在,但是,好吧......
无论如何,因为我不会使用字符“。” 在我要重定向的任何 URL 中,我认为用“。”排除文件名是一个非常好的主意。在 RewriteCond 中,因为它应该处理 .css、.js 和 .gif/.jpg。
没那么幸运。如果我输入带有“。”的 URL。在浏览器位置,我收到(正确的)消息“找不到文件”,但是当我检查服务器日志时,HTML 模板引用的每个不存在的文件都会传递给 CGI,无论它是否包含“ 。” 或不。css/doc.css
将按原样处理images/bg.png
所有其他包含“.”的文件。我的 .htaccess 文件包含以下规则:
RewriteEngine on
RewriteBase /bla
RewriteCond %{REQUEST_FILENAME} !\.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /cgi-bin/env.pl?.template=Main.html&.query=$1 [PT]
但是,在将外部样式表 (css/doc.css) 的 HTML 文件中的一个引用更改为绝对 URL (aka /css/doc.css) 后,它只会引发“找不到文件”错误,如应该按照上面的规则。Apache 是否没有将这些正则表达式应用于相对 URL?