1

我有四个要重写的网址。

  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

其中,index检查数据库并重定向到正确的页面(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

我如何更好地分离这些案例 - 如果它在案例 1 之后匹配 domain.com/1234 停止 - 如果它与案例 2 和 3 匹配 domain.com/a/1234 停止 - 如果它用于 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 回答