Mod_rewrite处理“数据格式”参数

时间:2013-09-16 17:32:14

标签: php .htaccess mod-rewrite

我的示例htaccess文件包含代码:

RewriteRule ^cart$ index.php?controller=cart&action=default [L,NC]
RewriteRule ^listing$ index.php?controller=product&action=listing [L,NC]
RewriteRule ^blog$ index.php?controller=blog&action=listing [L,NC]

我可以通过example.com/cart访问购物车

我的问题:是否有可能添加一些额外的参数,例如“数据格式”参数?

我希望能够访问example.com/cart(作为html输出)和example.com/cart.xml 和其他网址: example.com/listing.xml example.com/blog.xml

对我来说,重要的是不要修改每个重写规则。我在htaccess文件中有线条,所以添加一些修改URL请求的代码会快得多。

它可以这样工作:

  1. 从网址中删除.xml
  2. 匹配重写网址
  3. add?format = xml(index.php?controller = blog& action = listing& format = xml)
  4. 现代PHP和非PHP框架通常使用此功能将呈现的网站输出为html,xml,json等。

    @EDIT:

    谢谢!我应该在你写的时候使用QSA标志。

    我现在正在使用的规则添加.xml参数:

    RewriteRule ^(.*).xml$ $1?params[output_format]=xml
    

1 个答案:

答案 0 :(得分:1)

您可以使用以下规则:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(cart|listing|blog)\.(xml)\s [NC]
RewriteRule ^ /%1?format=%1 [R=302,L]

RewriteRule ^cart$ index.php?controller=cart&action=default [L,NC,QSA]
RewriteRule ^listing$ index.php?controller=product&action=listing [L,NC,QSA]
RewriteRule ^blog$ index.php?controller=blog&action=listing [L,NC,QSA]
  • 第一条规则将从网址中删除.xml并向其添加?format=xml查询参数。
  • 带有QSA标志的第二条规则添加剩余的查询参数。