【问题标题】:Simple Mod Rewrite简单的模组重写
【发布时间】:2011-10-28 22:07:57
【问题描述】:

我正在尝试创建一个 mod 重写来简单地打开这些链接:

/index.php?page=home
/?page=home

进入

/home

谁能告诉我这是怎么做到的?当我们讨论这个主题时,是否有任何好的资源可以阅读 mod rewrite?到目前为止,我最大的困难是我没有看到任何调试它的方法。事情要么起作用,要么不起作用。

【问题讨论】:

    标签: php mod-rewrite


    【解决方案1】:

    如果我理解,您希望您的最终用户输入 example.com/home 并将其重写为 /index.php?home

    RewriteEngine On
    # /home or / get redirected...
    RewriteRule ^(home)?$ /index.php?page=home [L,QSA]
    

    要调试,您可以启用RewriteLog。但是,正如 cmets 中所建议的,它应该仅用于调试。最好在生产中禁用它或将级别设置为非常低。

    RewriteLog "/path/to/logs/rewrite.log"
    # Increase the log level (default 0, >4 gets pretty verbose) 
    RewriteLogLevel 3 
    

    【讨论】:

    • 非常感谢,这很有帮助。
    • 小注——RewriteLogLevel 3 对于认真的重写调试来说太低了——它只会给你一个正在发生的事情的概述,而不需要详细说明。要查看详细信息,请使用第 9 级——它更详细。
    • 我会在这个答案中添加一个关于 RewriteLog 的严重警告,因为如果你“忘记”它,它可能会成为资源消耗,而且它真的不应该长时间处于更高级别次,因为该文件将快速变大千兆字节...
    • @sg3s 同意 - 我在答案中添加了一个注释。
    【解决方案2】:

    有多种方法可以做到这一点。这个将规则应用于任何不存在的文件:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?page=$1 [L]
    

    编辑:您可能需要在顶部添加RewriteEngine on,这会在您的Web 文档根目录中添加.htaccess。当然,所有这些都取决于您的 Web 主机是否允许使用 htaccess (mod_rewrite),以及规则覆盖文件是否应命名为 .htaccess。两者都很常见,所以应该不是问题。

    【讨论】:

    • 谢谢,这实际上是我需要的,但是“将规则应用于任何不存在的文件”是什么意思?
    • 当然!仅当请求与文件系统上的文件(第 1 行)或文件系统上的目录(第 2 行)不匹配时,才会应用 RewriteRule 行。换句话说,这仍然可以让您提供任何实际存在的文件并将其他所有内容传递给 index.php
    【解决方案3】:
    RewriteRule .*\?page=(\w+)$ /$1/ [NC]
    

    应该做的伎俩,但也许你可以更具体的情况下需要工作?

    这是一个您可以在 htaccess 上阅读的网站

    http://corz.org/serv/tricks/htaccess2.php

    【讨论】:

    • 有趣的方法,谢谢。那么在这种情况下就不需要 RewriteCond 了吗?
    • 编辑后重新阅读您的问题,我意识到这不是您想要做的......对于漂亮的网址,请查看 Matts 的答案。我提供的网站仍然是一个很好的资源:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多