Ric*_*aul 3 regex apache parameters url mod-rewrite
我正在使用mod_rewrite将漂亮的URL重写为Spring 2.5应用程序支持的表单.
e.g. /category/cat1?q=x => /controller?category=cat1&q=x
Run Code Online (Sandbox Code Playgroud)
但是,从我的控制器我想知道请求来自的原始URL(所以我可以生成链接,如果需要).所有页面通常都需要这种方法,因此很难进行硬编码.
如何从控制器访问原始路径+查询字符串?
我尝试使用$ 0来包含完整路径,但这不包括查询字符串.我不能只追加路径和查询字符串,因为这会导致路径的某些部分被添加为参数/category/cat1?category=cat1&q=x 注意添加不需要的&category=cat1参数,这会导致URL不再与浏览器发送的URL匹配.
我希望mod_rewrite允许我引用完整的URL并将其编码为参数,因此我的规则可能如下所示:
RewriteRule /category/(.+)
/controller?category=$1&_originalUrl=${escape:$0}?${escape:<original query string>}
[QSA]
Run Code Online (Sandbox Code Playgroud)
使用我的原始示例,最终结果传递给我的控制器将是:
/controller?category=cat1&_originalUrl=%2Fcategory%2Fcat1%3Fsearch%3Dx&search=x
Run Code Online (Sandbox Code Playgroud)
最重要的部分是的值&_originalUrl应该是%2Fcategory%2Fcat1%3Fsearch%3Dx这在其转义的版本/category/cat1?q=x(这是从浏览器发送的原始请求URL).
欢迎任何建议,提前谢谢!
查询可以进行测试,RewriteCond因为RewriteRule它只测试URL路径.请参阅Jonathan Feinberg的示例,了解如何做到这一点.
但您也可以设置QSA标志,旧查询会自动附加到新查询:
RewriteRule ^/category/([^/]+)$ /controller?category=$1 [QSA]
Run Code Online (Sandbox Code Playgroud)
编辑 响应您对此问题的评论:如果要获取初始请求的URI路径和查询,则需要从请求行(THE_REQUEST变量)中提取它:
RewriteCond %{THE_REQUEST} ^[A-Z]+\ ([^\s]+)
RewriteRule ^/category/([^/]+)$ /controller?category=$1&_originalUrl=%1 [QSA]
Run Code Online (Sandbox Code Playgroud)
但在大多数语言中,都有一个具有相同信息的环境变量.
| 归档时间: |
|
| 查看次数: |
15741 次 |
| 最近记录: |