htaccess查询到多个路径

时间:2010-06-24 15:10:07

标签: .htaccess mod-rewrite query-string

我有一个网站,其中包含以下.htaccess规则:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?id=$1
</IfModule>

它运行良好,但我需要扩展它,以便如果用户采用另一条路径,我可以转发它(但根路径应该仍然有效)。我尝试了这个,但网站只是继续处理第一个RewriteRule:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?id=$1
RewriteRule /^(.*)$/^(.*)$ /$1.php?id=$2
</IfModule>

有什么想法吗?

所以根页可能是

  • domain.com/doug所以这是/index.php?id=doug
  • domain.com/dave所以这是/index.php?id=dave

内部路径可能是

  • domain.com/group/object1所以这是/group.php?id=object1
  • domain.com/group/object2所以这是/group.php?id=object2
  • domain.com/admin/login所以这是/admin.php?id=login

1 个答案:

答案 0 :(得分:1)

好的,我认为你必须采取不同的方式。

简单的方法是将所有内容传递给index.php,在根文件夹('admin','group'等等上删除$_GET['id']switch($id[0])。 )作为脚本中的参数。

索引中甚至可能是include("group.php")admin.php

否则,您将遇到根网址转到非预期网页的问题,例如:doug.phpdave.php

可以按当前的方式完成,但您需要为每个根文件夹硬编码案例:

实施例

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/admin/(.*)$ /admin.php?id=$1 [L,NC]
RewriteRule ^/group/(.*)$ /group.php?id=$1 [L,NC]
RewriteRule ^(.*)$ /index.php?id=$1

你需要在工作的RewriteRule行之上。该行应该始终是最后一行,因为它是catch-all / nothing-else-matched / default case。

如果根本页面的硬编码不是一个选项,(太多或者总是未知),从长远来看,你最好让index.php处理所有事情。

希望这有帮助。