【发布时间】:2011-10-28 22:07:57
【问题描述】:
我正在尝试创建一个 mod 重写来简单地打开这些链接:
/index.php?page=home
/?page=home
进入
/home
谁能告诉我这是怎么做到的?当我们讨论这个主题时,是否有任何好的资源可以阅读 mod rewrite?到目前为止,我最大的困难是我没有看到任何调试它的方法。事情要么起作用,要么不起作用。
【问题讨论】:
标签: php mod-rewrite
我正在尝试创建一个 mod 重写来简单地打开这些链接:
/index.php?page=home
/?page=home
进入
/home
谁能告诉我这是怎么做到的?当我们讨论这个主题时,是否有任何好的资源可以阅读 mod rewrite?到目前为止,我最大的困难是我没有看到任何调试它的方法。事情要么起作用,要么不起作用。
【问题讨论】:
标签: php mod-rewrite
如果我理解,您希望您的最终用户输入 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 级——它更详细。
有多种方法可以做到这一点。这个将规则应用于任何不存在的文件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L]
编辑:您可能需要在顶部添加RewriteEngine on,这会在您的Web 文档根目录中添加.htaccess。当然,所有这些都取决于您的 Web 主机是否允许使用 htaccess (mod_rewrite),以及规则覆盖文件是否应命名为 .htaccess。两者都很常见,所以应该不是问题。
【讨论】:
RewriteRule 行。换句话说,这仍然可以让您提供任何实际存在的文件并将其他所有内容传递给 index.php
RewriteRule .*\?page=(\w+)$ /$1/ [NC]
应该做的伎俩,但也许你可以更具体的情况下需要工作?
这是一个您可以在 htaccess 上阅读的网站
【讨论】: