1

有静态 html 文件称为blahblah.html?somestring. 我总是收到 404 错误。当我尝试时blahblah.html%3fsomething- 它半有效(将 html 源显示为文本),但 ` 需要 URL 与问题符号完全一致。

如何使 Apache 使用包含“?”的确切 URL 显示此文件。

我试图文件重命名为“blahblah.html-somestring” + .htaccess 中的规则

RewriteRule ^/(.*).html\?(.*)$ /$1.html-$2 [NE]

没有帮助

这帮助了我:我将所有文件重命名为 blahblah.html-somestring.html + 将其添加到 .htaccess:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^[^.]+\.html/?$ %{REQUEST_URI}-%{QUERY_STRING}.html? [L,NC]
4

2 回答 2

0

通过启用 mod_rewrite 和 .htaccess httpd.conf,然后将此代码放入 DOCUMENT_ROOT 下的 .htaccess 中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} !^$
RewriteRule ^[^.]+\.html/?$ %{REQUEST_URI}-%{QUERY_STRING}? [L,NC,R]

这将重写blahblah.html?somestringblahblah.html-somestring. 但是,如何从 中提供内容blahblah.html-somestring,您必须弄清楚。

于 2012-04-20T11:15:59.853 回答
0

实际上我可以在这里看到两个问题:

1)你想使用?作为文件名一部分的字符

我看不到这个问题的简单解决方案。问号是 HTTP 协议的一部分,您可以重写 URL,但使用这些工具无法实现所需的解决方案。如果您可以使用 %3f 方法,这将是解决此问题的最简单方法。

2) 您想在文件后缀之外设置正确的 MIME 类型

Apache 根据文件名检测正确的 MIME 类型(例如 text/html)。如果文件以 .htm 或 .html 结尾,Apache 会提供 MIME 类型为 text/html 的内容。由于您的文件名不以预期的后缀结尾,并且正则表达式确实适用于 MIME 表,因此使其工作的唯一方法是 mod_rewrite 模块中的一些正则表达式。在这里您可以检测到文件名中间的后缀并能够设置 MIME 类型:

RewriteEngine On
RewriteRule ^(.+\.html.*)$ $1 [T=text/html] 

整体解决方案:

您可以使用简单的 Web 应用程序解决 #1 和 #2,检查源请求字符串并提供匹配的文件(以及设置正确的 MIME 类型)。例如,您可以使用 PHP 执行此类操作。

于 2012-04-20T11:37:50.850 回答