Mod Rewriteの完全な混乱[クローズ]
-
05-07-2019 - |
質問
こちらが私の.htaccessファイルです
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule subpage\?sid /index.php [R=301,L,NC]
私のリクエストは http://example.com/subpage?sid
index.phpにリダイレクトするのではなく、404 Not Foundを返し続けます
?をエスケープしないでみました。リクエストを http://example.com/subpage\?sid
これを機能させるために多くのことを試しましたが、今は困惑しています。
解決
QUERY_STRINGはURIの一部ではありません。 RewriteRule のドキュメントから:
注:クエリ文字列
Pattern はクエリ文字列と照合されません。代わりに、
%{QUERY_STRING}
変数とともにRewriteCondを使用する必要があります。
ドキュメントによると、次のようなRewriteCondを使用する必要があります。
RewriteCond %{QUERY_STRING} (^|&)sid([&=]|$) [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]
%{QUERY_STRING}が本当にオプションでない場合は、次を試してください:
# Apache is supposed to use PCRE, but doesn't seem to like "\\s"
RewriteCond %{THE_REQUEST} subpage?sid[^!-~] [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]
また、RewriteBaseを使用しているため、RewriteBaseはほとんど必要ありません(" RewriteBase /")。行にコメントを付けてテストして確認しますが、おそらく悪影響なく削除できることがわかります。
他のヒント
サイトのVirtualHost設定を確認し、対応するディレクトリにAllowOverride設定を設定する必要があるかもしれませんか?
<Directory /var/www/vhosts/some_host>
....
AllowOverride All
</Directory>
apacheの AllowOverride
の詳細所属していません StackOverflow