我正在使用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
我已经阅读了关于制作例外但我无法弄清楚如何获得:
我确定这可能归结于Rewrite标志以及这些指令的编写顺序,但我无法让它工作。
答案 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
应该照顾它。