我有一个网站,其中包含以下.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>
有什么想法吗?
所以根页可能是
内部路径可能是
答案 0 :(得分:1)
好的,我认为你必须采取不同的方式。
简单的方法是将所有内容传递给index.php
,在根文件夹('admin','group'等等上删除$_GET['id']
和switch($id[0])
。 )作为脚本中的参数。
索引中甚至可能是include("group.php")
或admin.php
。
否则,您将遇到根网址转到非预期网页的问题,例如:doug.php
和dave.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
处理所有事情。
希望这有帮助。