如果 URL 中请求的资源没有扩展名并且文件名与资源匹配,则使用 mod_rewrite 来服务该文件。否则,触发错误404。
例如请求是 /foo 并且我有 foo.html 那么我应该为 foo.html 提供服务
我有一个名为 foo.html 的文件
RewriteEngine on
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [NC,L]
浏览 SO 和 Apache 文档后我最好的选择是这一行:
根据 AcceptPathInfo 的值,服务器可能仅使用 REQUEST_URI 的一些前导组件将请求映射到文件。
我假设这是错误原因是否正确? REQUEST_FILENAME = foo 而不是 /foo/bar ? 没有日志很难判断。
如果我是对的,替代方案是什么?我可以检查 REQUEST_FILENAME 是否以 REQUEST_URI 结尾吗?这会告诉我这个行为被触发了。
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at [email] to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
我确认。问题是由于 Apache 配置,REQUEST_FILENAME 不可靠。 因为它是共享主机,所以我无法修改该选项。
所以我不得不诉诸丑陋的硬编码。 我基本上通过使用 REQUEST_URI 来伪造我想要的 REQUEST_FILENAME,这样我可以测试我真正感兴趣的文件。
# Hide html
RewriteCond /path_to/public_html%{REQUEST_URI}\.html -f
RewriteRule ^(.*)$ $1.html [NC,L,E=LOOP:1]