1

古い php ファイルを新しい seo フレンドリーなファイルにリダイレクトしたい:

user.php?user=$var1&task=$var2 -> url/$var1/$var2

2つの問題があります。$var2 は毎回設定されるわけではないので、対処方法がわからず、クエリ文字列は常に最後に追加されます。

テストには次のリダイレクト ルールを使用します ($var2 なし)

RewriteCond %{THE_REQUEST} ^(.+)user\.php(.+)$
RewriteCond %{QUERY_STRING} user=([^/]+)$
RewriteRule ^(.+)\.php$ %1 [R]

私はこれを得る:

    url/$var1/?user=$var1

2 番目の問題は、url/$var1 -> user.php?user=$var1 という書き換えルールです。それがないと、サーバー エラーが発生します。

現時点では、テストのためにこの静的なものを試しましたが、これが唯一のルールではないため、ここで条件が間違っています

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ user.php?user=$1 [L]

変数を使用して正しい結果とより柔軟な結果を得るにはどうすればよいですか? mod_rewrite は今のところ私の世界ではないので、暗闇に光をもたらすことができれば幸いです。

Thxルーベン

4

1 に答える 1

1

1) 最後にクエリ文字列を防止する方法は、? を追加することです。書き換え先の URL の末尾に .

RewriteCond %{THE_REQUEST} ^GET\ /user\.php
RewriteCond %{QUERY_STRING} user=([^&=]+)$
RewriteRule ^user\.php %1? [R]

var1 と var2 の両方が設定されている場合は、次のようになります。

RewriteCond %{THE_REQUEST} ^GET\ /user\.php
RewriteCond %{QUERY_STRING} user=([^&=]+)$
RewriteCond %{QUERY_STRING} task=([^&=]+)$    
RewriteRule ^user\.php %1/%2? [R]

これらを組み合わせると(2番目のものを最初に)、必要に応じてリダイレクトする必要があります

2) これは一種の「キャッチオール」URL であるため、これを .htaccess の最後のオプションとして配置し、ファイルまたはディレクトリ以外のすべてを user.php にリダイレクトしてから、user.php にユーザーが存在し、存在しない場合は HTTP 404 で応答します。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ user.php?user=$1 [L]

(まったく同じコンテンツに対して 2 つの URL を使用することはお勧めできないため、末尾の / を削除しました)。

于 2013-05-16T08:20:14.120 に答える