1

と呼ばれる静的な html ファイルがありますblahblah.html?somestring。私はいつも404エラーになります。試してみるとblahblah.html%3fsomething、半分は機能しますが(HTMLソースをテキストとして表示します)、URLが正確に疑問符である必要があります。

「?」を含む正確な URL でこのファイルを Apache に表示させる方法。

ファイルの名前を「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

実際には、ここに 2 つの問題があります。

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] 

全体的な解決策:

#1 と #2 は単純な Web アプリケーションで解決できます。オリジン リクエスト文字列をチェックし、一致するファイルを配信します (正しい MIME タイプを設定するだけでなく)。たとえば、PHPでそのようなことを行うことができます。

于 2012-04-20T11:37:50.850 に答える
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?somestringられblahblah.html-somestringます。ただし、コンテンツが からどのように提供されるかは、blahblah.html-somestring把握する必要があります。

于 2012-04-20T11:15:59.853 に答える