我正在尝试创建一个 mod rewrite 规则,以便简单地将这些链接转换为:
/index.php?page=home
/?page=home
转换成
/home
有人能向我展示如何完成这个吗?顺便问一下,有什么好的资源可以了解 mod_rewrite 吗?到目前为止,我最大的困难是看不到任何调试方式;事情要么能够工作,要么不能。
我正在尝试创建一个 mod rewrite 规则,以便简单地将这些链接转换为:
/index.php?page=home
/?page=home
转换成
/home
有人能向我展示如何完成这个吗?顺便问一下,有什么好的资源可以了解 mod_rewrite 吗?到目前为止,我最大的困难是看不到任何调试方式;事情要么能够工作,要么不能。
有很多种方法可以实现这一点。这个方法将规则应用于任何不存在的文件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L]
编辑:您可能需要在顶部添加RewriteEngine on
,并将其放置在您的Web文档根目录中的.htaccess
文件中。当然,所有这些都取决于您的Web主机是否允许使用htaccess(mod_rewrite)以及规则覆盖文件是否应该命名为.htaccess。不过,这两者都很常见,所以不应该成为问题。
example.com/home
并将其重写为 /index.php?home
?RewriteEngine On
# /home or / get redirected...
RewriteRule ^(home)?$ /index.php?page=home [L,QSA]
要进行调试,您可以启用RewriteLog
。但是,正如评论中建议的那样,它仅应用于调试。在生产中,最好禁用它或将级别设置得非常低。
RewriteLog "/path/to/logs/rewrite.log"
# Increase the log level (default 0, >4 gets pretty verbose)
RewriteLogLevel 3
RewriteLogLevel 3
对于严格的重写调试来说过于低了 - 它只会让您了解正在发生什么,而不会详细说明。要查看详细信息,请使用Level 9 - 这样更加冗长。 - LazyOneRewriteRule .*\?page=(\w+)$ /$1/ [NC]
这应该可以解决问题,但也许你需要更明确哪些情况需要工作?
这是一个网站,你可以阅读关于htaccess的相关内容。
RewriteRule
行。换句话说,这仍然允许您提供任何实际存在并通过其他所有内容传递到index.php的文件。 - Matt Stein