【问题标题】:.htaccess and params.htaccess 和参数
【发布时间】:2012-02-01 04:42:53
【问题描述】:

我在互联网上挖掘 .htaccess 并重写我需要对我的网站执行的规则。

我看到了一些我不明白的东西,想知道它是什么意思

我想知道我需要用于我的网站的 2 个正则表达式与我需要使用的所有其他正则表达式有什么区别):

RewriteRule ^home$ mainpage.php?id=$1 [QSA]

RewriteRule ^home(/)?$ mainpage.php?id=$1 [L]

我查看了 QSA 和 L,但 (/) 是什么意思?

【问题讨论】:

  • (/)? 用于捕获example.com/homeexample.com/home/

标签: .htaccess mod-rewrite


【解决方案1】:

(/)? 表示“可选的斜线”。

  • (/) 创建一个包含/匹配括号之间的任何内容的组。在这种情况下,由于它是单个字符,因此括号更用于捕获片段而不是其他任何内容。 (取决于模式中有多少捕获组(括号组)以及它们的位置,任何匹配都将变为 $1$2 等。)

顺便说一句,您的第一个 RewriteRule 没有多大意义——因为没有组可以为 $1 提供值,它可能总是为空白。在第二个中,$1 将为空或斜杠,具体取决于子模式是否匹配。 home 将被重写为mainpage.php?id=home/ 将被重写为mainpage.php?id=/

  • ? 表示“前一个原子的 0 或 1”。 (顺便说一句,“原子”是正则表达式的构建块。)在这种情况下,由于它前面的原子是(/)(实际上是/),? 表示“0 或 1 个斜线”。

【讨论】:

    【解决方案2】:

    表达式将是 (/)? 而不是 (/)。这意味着 URL 上是否有斜线。这两个 URL 将转到同一个地方:

    http://www.domain.com/home/

    http://www.domain.com/home
    

    所以斜线是可选的。这样,如果机器人或搜索引擎放置它,规则就会起作用。

    你可以像这样重写规则:

    RewriteRule ^home/?$ mainpage.php?id=$1 [L,QSA]
    

    另外,我看到你说:

    在我需要使用的所有其他人中

    如果您的所有页面都进入同一个文件(在本例中为 mainpage.php),您可以创建一个规则来自动重写它们,而不是创建 10 或 15 个规则(或更多)。你可以这样做:

    RewriteEngine on
    REwriteBase /
    RewriteRule ^([a-z0-9\-_]+)/?$ mainpage.php?id=$1 [L,QSA]
    

    此规则将使用字母、数字、破折号和下划线作为页面。

    【讨论】:

    • 感谢您提供此信息和此规则,我有大约 25 页,这非常有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2012-09-27
    • 2020-07-23
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    相关资源
    最近更新 更多