这是我想要实现的目标:
之前:
www.example.com/index.php?page=about&pg=5
后:
www.example.com/about.html?pg=5
URL必须在最后具体包含该查询。我想避免使用这些静态方法: www.example.com/page/about/pg/5/ 要么 www.example.com/about/5 /
这是我到目前为止所拥有的:
RewriteEngine On
RewriteBase /
RewriteRule ^([a-zA-Z-]+)\.html\?pg\=([0-9]+)$ index.php?page=$1&pg=$2 [L]
当我var_dump($ _ GET);只有'页面'参数是可见的。
我希望结果好像我在地址栏中输入一样,www.example.com / about.html?pg = 5与输入www.example.com/index.php?page=about&pg的意思相同= 5。而不是使用.php我想它显示为.html。参数' pg'是我用作各种页面的超链接。我想删除" index.php'并将其设为' about.html',然后查询的其余部分。
例如,此页面将用于文章。该文章中将有一节评论。我想用参数' pg'来控制评论的页面。
答案 0 :(得分:2)
如果我理解正确,您需要将about.html?...
重写为index.php?page=about&...
。如果是这样,有一个简单的解决方案:只需使用[QSA]
标志。
RewriteRule ^([0-9A-Za-z]+)\.html$ index.php?page=$1 [NS,QSA]
更一般地说,您可以使用RewriteCond
来匹配查询字符串中的文本。正如documentation所说:
“如果您希望与主机名,端口或查询字符串匹配,请分别使用
RewriteCond
,%{HTTP_HOST}
或%{SERVER_PORT}
变量。{”
例如,在没有%{QUERY_STRING}
标志的情况下实现相同效果的另一种方法是:
[QSA]
或者,如果你想走另一条路(我第一次看到你的问题):
RewriteCond %{QUERY_STRING} ^pg=([0-9A-Za-z]+)$
RewriteRule ^([0-9A-Za-z]+)\.html$ index.php?page=$1&pg=%1 [NS]
(编辑:根据RewriteCond %{QUERY_STRING} ^page=([0-9A-Za-z]+)&pg=([0-9]+)$
RewriteRule ^index\.php$ %1.html?pg=%2 [NS]
的评论删除了错误的问号。)