Siw*_*申思维 1 mod-rewrite nginx static-pages content-management-system
我希望我的Nginx服务动态URL作为静态页面,例如
given a url "/book?name=ruby_lang&published_at=2014" ,
the nginx will serve a static file (which is generated automatically ) named as:
"book?name=ruby_lang&published_at=2014.html" or:
"book-name-eq-ruby_lang-pblished_at-eq-2014.html"
Run Code Online (Sandbox Code Playgroud)
这可能吗?
注意:
1.没有名为的静态文件:
"book?name=ruby_lang&published_at=2014.html" nor
"book-name-eq-ruby_lang-pblished_at-eq-2014.html"
Run Code Online (Sandbox Code Playgroud)
但是,如果需要,我可以生成它们.
2.我不能改变给消费者的网址.例如,我的消费者只能通过我发送请求
"/book?name=ruby_lang&published_at=2014"
Run Code Online (Sandbox Code Playgroud)
但没有任何其他网址.
如果你可以自己生成HTML文件,你可以简单地使用nginx的重写模块.例:
rewrite ^/book book-name-eq-$arg_name-published_at-eq-$arg_published_at.html last;
Run Code Online (Sandbox Code Playgroud)
如果您需要确保name并且published_at有效,您可以改为执行以下操作:
location = /book {
if ($arg_name !~ "^[A-Za-z\d_-]+$") { return 404; }
if ($arg_published_at !~ "^\d{4}$") { return 404; }
rewrite ^/book book-name-eq-$arg_name-published_at-eq-$arg_published_at.html last;
}
Run Code Online (Sandbox Code Playgroud)
这将确保它published_at是一个有效的4位整数,并且name是有效的标识符(英文字母,数字,下划线和连字符).
要确保只能从一个URL访问一本书,如果URL是HTML文件,则应该抛出404.在上一条规则之前添加:
location ~ /book-(.*).html {
return 404;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1174 次 |
| 最近记录: |