如何使用mod_rewrite删除CMS中的查询字符串

时间:2011-09-29 16:05:56

标签: apache mod-rewrite

我正在使用CMS,使用以下RewriteRule将所有请求发送到index.php文件

RewriteRule .* index.php [L]         

然而,在网站的新闻栏目中,CMS正在生成如下新闻链接:/news?month=201106

我想要这样的新闻链接:/news/month/201106我会用PHP代码实现这一点。

我非常了解如何使用Apache实现重写,如果它不是用于那个catchall我会使用这样的东西:

RewriteRule ^news/month/(.+)$ news?month=$1 

但是我的问题是CMS正在接听电话并尝试查找/ news / month / 201106,它不能并且会抛出CMS级别404

我已经阅读了关于制作例外但我无法弄清楚如何获得:

  1. Apache在将其发送到catch all
  2. 之前捕获重写
  3. CMS然后正常处理重写的URL(即:接收新闻?月= 201106并正常处理)
  4. 我确定这可能归结于Rewrite标志以及这些指令的编写顺序,但我无法让它工作。

1 个答案:

答案 0 :(得分:1)

  

1)Apache在将其发送到catch all

之前捕获重写

您可以在RewriteRule .* index.php [L]之前添加RewriteCond,以便它看起来像这样:

RewriteCond %{REQUEST_URI} !^/news
RewriteRule .* index.php [L]
  

2)CMS然后正常处理重写的URL(即:接收新闻?月= 201106并正常处理)

你拥有的第二条规则RewriteRule ^news/month/(.+)$ news?month=$1应该照顾它。