1

URL の書き換えがうまくいかない理由を突き止めようと、私は頭を悩ませていました。

私は現在使用しています

RewriteEngine On
Options +FollowSymLinks
RewriteRule ^([^/]*)/([^/]*)/$ /profile.php?county=$1&name=$2&id=1 [L]

何の影響もなく、mod_rewrite がどこにあるのかを確認しました。私が使用する場合

RewriteRule ^rdr\.html http://www.google.com/? [R=301,L]

私はGoogleにリダイレクトされたので、それは間違いなく私がしていることに違いないことを知っています.

書き換えようとしているURLは...

http://www.mysite.com/profile.php?county=Cheshire&name=Martin-Mack&id=2
4

5 に答える 5

2

質問に対する正確な答えではありませんが、おそらく一般的には役立ちます。問題の追跡に役立つ書き換えログをオンにできます。

Apache 2.2 の場合:

RewriteLog com.example_rewrite.log 
RewriteLogLevel 3

構文はApache 2.4でわずかに変更されました。

于 2012-10-22T09:08:36.787 に答える
1

これは私のために働く:

.htaccess

RewriteEngine On
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ profile.php?county=$1&name=$2&id=1

profile.php

<h1>Profile</h1>
<?php
echo "County: " . $_GET['county'] . "<br>";
echo "Name: " . $_GET['name'] . "<br>";
echo "Id: " . $_GET['id'];

この URL:http://localhost/tests/htaccess_test/Cheshire/Martin-Mack

この HTML を作成しました:

<h1>Profile</h1>
County: Cheshire<br>Name: Martin-Mack<br>Id: 1

Opera でのレンダリング

Apache 2.2.21 および PHP 5.3.10 でテスト済み。


私のテストでは、両方のファイルを にhttp://localhost/tests/htaccess_test/配置しましたが、好きな場所に配置できます。それらは同じフォルダーにある必要があるだけです。

たとえば、あなたの場合、ファイルをWebサイトのルートに配置して、にアクセスしたときhttp://www.yoursite.com/Cheshire/Martin-Mackにリダイレクトが機能するようにする必要があります。

それでも動作しない場合は、RewriteBase /直後に追加してみてくださいRewriteEngine On

完全な例:

RewriteEngine On
RewriteBase /
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ profile.php?county=$1&name=$2&id=1

更新:元のコードでは、idパラメーターは静的です。それも機能させるには、これを試してください:

RewriteEngine On
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ profile.php?county=$1&name=$2&id=$3
于 2012-10-22T08:48:39.760 に答える
0

リライトがinまたはhtaccessの場合、「profile.php」と比較されるため、中央の/は一致せず、最後の2番目のスラッシュは一致しません。

于 2012-10-22T12:51:28.447 に答える
0

この回答の上部では、URL がどのように書き換えられリダイレクトされるかを明確にしています。そこでは、まったく異なる 2 つのことが起こっています。

URL/profile.php?county=foo&name=bar&id=1234をより見栄えの良いバリエーションに変更するには、実際のリクエストと照合してブラウザをリダイレクトする必要があります。

RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /profile\.php\?county=([^&]+)&name=([^&]+)&id=([0-9]+)
RewriteRule ^ /%2/%3/%4/? [L,R=301]

IDも URL の一部である必要があることに注意してください( を介して後方参照されます%4)。これにより、誰かがブラウザに URL:http://mysite.com/profile.php?county=Cheshire&name=Martin-Mack&id=2を入力すると、外部から にリダイレクトさhttp://mysite.com/Cheshire/Martin-Mack/2/れ、アドレス バーの URL が変更されます。

次に、見栄えの良い URL を内部的に書き換えて、それを php スクリプトに戻すには、次のようにします。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^/]+)/([^/]+)/([0-9]+)/?$ /profile.php?county=$1&name=$2&id=$3 [L]

これは逆ですが、内部的にのみ行われるため、コンテンツが から提供されている間、ブラウザのアドレス バーの URL は変更されませんprofile.php

于 2012-10-22T09:29:41.717 に答える
0

あなたのルールは非常に近いです。

 RewriteRule ^([^/]+)/([^/]+)/?$ /profile.php?county=$1&name=$2&id=1 [L]
  • サミュエル・クック氏があなたの問題に触れたと思います --- あなたのルールには末尾のスラッシュが必要です。?ルールの末尾のスラッシュの後に を追加すると、スラッシュを含む URL と含まない URL の両方が許可されます。

  • また、修飾子が空の文字列に一致し、リダイレクト ループが発生する可能性があるため、変更されたルールでは+s の代わりに s が使用されます。**

補足:テスト中は 302 リダイレクトを使用してください。 ブラウザは 301 リダイレクトを「記憶」します。

于 2012-10-19T14:29:21.783 に答える