【问题标题】:htaccess querystring to multiple pathshtaccess 查询字符串到多个路径
【发布时间】:2011-03-07 21:03:49
【问题描述】:

我有一个具有以下 .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

【问题讨论】:

    标签: .htaccess mod-rewrite query-string


    【解决方案1】:

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

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

    甚至可能在索引中使用include("group.php")admin.php

    否则,您将遇到根 url 进入非预期页面的问题,例如: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 行上方使用这些。该行应该始终放在最后,因为它是包罗万象/没有其他匹配/默认情况。

    如果无法对根页面进行硬编码(太多或总是未知),从长远来看,您最好让index.php 处理所有事情。

    希望这会有所帮助。

    【讨论】:

    • 感谢 stackoverflow 让我的代码示例看起来像垃圾,这是一个更好的副本:pastebin.com/GeVTeBt1
    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 2016-03-26
    • 1970-01-01
    • 2019-01-02
    • 2018-12-02
    • 2020-11-03
    • 1970-01-01
    • 2012-10-11
    相关资源
    最近更新 更多