2

私はURLを持っています: http://www.mywebsite.com/i/1Q2GmFuFdZ.jpg

ファイルに行かせるルールを書き直したいimage.php?id=1Q2GmFuFdZ.jpg

私のPHPファイルには、これがあります

<?PHP
print_r($_GET);
?>

これは私のhtaccessにあるものです

RewriteEngine On
RewriteRule ([a-zA-Z0-9]+[\.]+[a-z]{3})$ image.php?id=$1

これは私が得ている出力です:

Array ( [id] => image.php )

何が間違っているのかわかりません。私は正規表現のプロではありませんが、基本は知っています。

ありがとう

編集: 式に 0-9 を追加するのを忘れた

4

2 に答える 2

3

mod_rewrite ルールは再帰的に適用されます。リクエストすると次のようになります1Q2GmFuFdZ.jpg

  • 1Q2GmFuFdZ.jpgパターンに一致し、image.php?id=1Q2GmFuFdZ.jpg
  • ファイル名が変更されたため、書き換えられた URL を使用して別の反復が実行されます。
  • image.php パターンにも一致し、次のように書き換えられますimage.php?id=image.php
  • ファイル名またはディレクトリは変更されていないため、それ以上の反復は実行されません
  • 最終結果:image.php?id=image.php

解決策: 次のルールを追加します。

RewriteEngine On
RewriteRule image\.php$ - [L]
RewriteRule ([a-zA-Z0-9]+\.[a-z]{3})$ image.php?id=$1

2番目のルールはハンドブレーキとして機能します。ルール #3 も微調整する必要があります。

于 2012-12-10T10:18:23.697 に答える
1

Rewrite ルールが間違っています。次のようになります。

RewriteRule ^i/(.+)$ /image.php?id=$1 [L,NC,QSA]
于 2012-12-10T10:16:27.433 に答える