質問

こちらが私の.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

の詳細
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top