1

このルールを使用してリンクを書き換えています

RewriteEngine On
RewriteRule ^(.*)/(.*) show_cv.php?email=$1

このURLを最後のスラッシュで書くとうまくいきます

www.mysite.com/letschat_2008@yahoo.com/  ---->  index.php?email=letschat_2008@yahoo.com

しかし、リンクから最後のスラッシュを削除すると、www.mysite.com/letschat_2008@yahoo.com/エラー 404 が表示されます。

URL 書き換えルールがスラッシュありとなしの両方で機能することを望みます ( /)

www.mysite.com/letschat_2008@yahoo.com/ ----> index.php?email=letschat_2008@yahoo.com
www.mysite.com/letschat_2008@yahoo.com ----> index.php?email=letschat_2008@yahoo.com
4

3 に答える 3

1

ルールがループしています。メール アドレスを書き換えていることを確認し、いくつかの条件を追加して、既存のリソースにアクセスしている場合にルールが適用されないようにする必要があります。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9_\-\@\.]+)/?$ /show_cv.php?email=$1 [L]
于 2012-07-31T17:44:07.057 に答える
0

次に、次のルールを使用する必要があります。

RewriteRule ^(.*)/? show_cv.php?email=$1
于 2012-07-31T16:41:23.770 に答える
0

これらのルールは、説明を見るときにサーバー構成ではなく、.htaccess ファイルに記録されていると思いますか?

これをサーバー構成に入れたくない場合は、再考してください。.htaccess ファイルの使用法は別として、これらのファイルで書き換えルールを使用してデバッグすることは、サーバー構成よりも複雑です。これは mod_rewrites docs に記載されています。

この動作の理由は、両方の場合で REQUEST_URI の内容が異なるためです。これを直接確認してみてください。問題が表示されます。「letschat_2008@yahoo.com」の部分全体が、ケース 2 (「/」なし) の変数に単純に欠落しています。これを機能させるには、追加の rewriteCondition を使用する必要があります (これも文書化されています...)。これらの未テストの行のようなもの:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(.+)&
RewriteRule - show_cv.php?email=%1

(最後の行の「$」の代わりに「%」に注意してください)

于 2012-07-31T16:44:54.370 に答える