【问题标题】:Htacces rewrite rules and conditionsHtaccess重写规则和条件
【发布时间】:2013-04-24 18:42:51
【问题描述】:

我有这个完美的规则

重写引擎开启
RewriteRule ^([^/]+)/([^/]+) /demo/index.php?category=$1&subcategory=$2

这会将我的链接从

/demo/index.php?category=ABC&subcategory=XYZ

/demo/ABC/XYZ

但有时我只想输入这样的类别名称

/demo/ABC/

但不幸的是,这会产生错误找不到页面。是什么导致此错误,我该如何解决?

也有人可以提供 RewriteEngine 资源/书籍/教程的链接。我找不到任何可以帮助像我这样的初学者的东西。谢谢。

【问题讨论】:

    标签: .htaccess mod-rewrite rewrite


    【解决方案1】:

    将您的规则更改为:

    RewriteRule ^([^/]+)/([^/]*) /demo/index.php?category=$1&subcategory=$2 [L,QSA]
    

    这使得第二个参数是可选的(在[^/]* 中使用* 而不是+

    【讨论】:

    • 我对规则进行了进一步的更改,因为当我编写没有像这样的正斜杠的 URL 时,它给了我错误----/demo/ABC----所以我将规则更改为3 个论点和第 2 个论点是正斜杠,并使用 * 如您提到的那样使其成为可选。 ---- RewriteRule ^([^/]+)(/*)([^/]*) /demo/index.php?category=$1&subcategory=$3 [L,QSA] ---- 现在可以了,但它是正确的方法吗?
    • 最好这样使用:RewriteRule ^([^/]+)/?([^/]*) /demo/index.php?category=$1&subcategory=$3 [L,QSA]
    • 再次感谢先生,我在哪里可以找到所有这些信息,这样即使我也可以学习它而不会打扰你:)
    • 不客气。我通常参考:httpd.apache.org/docs/current/mod/mod_rewrite.html,但这确实有一些学习曲线。
    【解决方案2】:

    除非/demo/ABC/ 是您本地文件系统中存在的目录,否则它将无法找到该页面。您的第一条规则只是将填充参数的链接重写到该伪路径中,它不会建立虚拟目录或创建可靠的重定向。

    RewriteRule 的最佳信息可能是实际的Apache docs.

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 2016-08-13
      相关资源
      最近更新 更多