1

Apachemod_rewriteパターンを書き直したい。私は次のことを行うために使用します:

RewriteEngine on
RewriteRule /^([^A-Z0-9a-z]+)\.html /search.php?search_id=$1&%{QUERY_STRING}

上記のルールでは、期待したものが得られません。誰かが私のコードの何が悪いのか、そしてそれを解決する方法を教えてもらえますか?

編集しました。私の要件は単純です。/1.htmlを/search.php?search_id=1と入力すると、リダイレクトしたい

それでおしまい。

4

3 に答える 3

1

これは機能するはずです:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !search\.php
RewriteCond %{REQUEST_URI}  ^/([0-9]+)\.html [NC]
RewriteRule  .*    search.php?search_id=%1    [L,QSA]

静かにマップ

http://example.com/FileID.html

に:

http://example.com/search.php?search_id=FileID

search.phpは固定文字列と見なされますが、FileID任意の数にすることができます。

永続的なリダイレクトの場合は、次のように置き換え[L,QSA]ます[R=301,L,QSA]

于 2013-01-30T07:15:00.047 に答える
0

ルールにタイプミスがあります。これを試してください。

RewriteEngine on
RewriteRule ^/([^A-Z0-9a-z]+)\.html /search.php?search_id=$1&%{QUERY_STRING}

ちなみに、これを使用することもできます:

RewriteRule ^/?([^A-Z0-9a-z]+)\.html /search.php?search_id=$1&%{QUERY_STRING}

これにより、先頭のスラッシュはオプションになります。

于 2013-01-30T06:58:27.603 に答える
0

ドメインの後に1.htmlと入力していますか?つまり、ドメインがexample.comの場合、example.com / 1.htmlと入力しますか?実行している場合は、.htaccessファイルの正規表現の前に/を使用しないでください。

メインの.htaccessファイルに以下を追加してみてください。これは、Webサイトのホームページがあるディレクトリにあります。

RewriteEngine On
#RewriteBase /
RewriteRule ^([A-Za-z0-9]+)\.html/?$ /search.php?search_id=$1 [NC, L]

コメントとしてRewriteBaseを使用しました。共有サーバーを使用している場合は、コメントとして保持するか、行を削除してください。

編集:[NC、L]を使用して、ルールのNCフラグで大文字と小文字を区別する必要はなく(大文字と小文字を区別しない)、これが一致した場合は停止のLフラグを使用します。

于 2013-01-30T07:29:43.870 に答える