1

書き換えたい URL が 4 つあります。

  1. domain.com/index.php?id=1234 => domain.com/1234
  2. domain.com/a.php?id=1234 => domain.com/a/1234
  3. domain.com/b.php?id=4321 => domain.com/b/4321
  4. domain.com/gallery.php => domain.com/gallery

ここで、インデックスはデータベースをチェックして正しいページ (a、b、c.php - ect) にリダイレクトし、有効な ID が見つからない場合は gallery.php にリダイレクトします。

それぞれのケースで機能する RewriteRule を自分で書くことはできますが、ルールを超えずにそれらすべてを処理するように書く方法がわかりません。

ここに私の現在の Mod_rewrite .htaccess ファイルがあります:

RewriteEngine On

RewriteCond %{REQUEST_URI} !/gallery$ #excludes case 4

RewriteRule ^(.*)$ index.php?id=$1 #handles case 1

RewriteRule ^(.*)/(.*)$ $1.php?id=$2 #handles cases 2 and 3

RewriteCond %{REQUEST_URI} /gallery$
RewriteRule ^/gallery$ /gallery.php [L] #handles case 4

これにより、すべてが domain.com/gallery.php にリダイレクトされ、リダイレクトを試行しすぎるとエラーが発生します。domain.com/a/1234 を入れても domain.com/a/gallery.php にリダイレクトされる

これらのケースをより適切に分離するにはどうすればよいですか - domain.com/1234 に一致する場合はケース 1 の後に停止します - domain.com/a/1234 に一致する場合はケース 2 および 3 で停止します - domain.com/gallery の場合は後に停止しますdomain.com/gallery.php は呼び出されます...

助けてくれてありがとう!

4

1 に答える 1

1

コードを次のように置き換えます。

RewriteRule ^gallery/?$ /gallery.php [L,NC] #handles case 4

RewriteRule ^([^/]+)/([^/]+)/?$ /$1.php?id=$2 [L,QSA] #handles cases 2 and 3

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /index.php?id=$1 [L,QSA] #handles case 1
于 2012-12-10T21:13:29.727 に答える