4

我有一个要更改的 RewriteRule 设置

http://kn3rdmeister.com/blog/post.php?y=2012&m=07&d=04&id=4

进入

http://kn3rdmeister.com/blog/2012/07/04/4.php

但这实际上重定向了浏览器从中获取页面的位置。我还想显示

/blog/post.php?y=xxxx&m=xx&d=xx&id=xx

但让浏览器显示更简单的 URL,例如

/blog/post/year/month/day/id.php

我在某处读过一些关于使用 ProxyPass 的文章,但我不太清楚自己在做什么:P

我希望人们能够访问带有查询字符串的 post.php URL,或带有花哨的 shmancy 日期子目录的干净 URL 并获得相同的内容——同时最后显示干净的 URL。

4

1 回答 1

2

你想要这样的东西:

# First if someone actually requests a /blog/post.php URL, redirect them
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /blog/post\.php\?y=([0-9]{4})&m=([0-9]{2})&d=([0-9]{2})&id=([0-9]*)\ HTTP/
RewriteRule ^blog/post\.php$ /blog/%2/%3/%4/%5.php [R=301,L]

这会将浏览器重定向到/blog/##/##/##/##.phpURI,该 URI 将显示在其地址栏中。一旦它们被重定向,浏览器将发送一个请求,然后/blog/##/##/##/##.php您的服务器需要在内部将其重写

# We got pretty URLs, but need to rewrite back to the php request
RewriteRule ^blog/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^\.]+)\.php$ /blog/post.php?y=$1&m=$2&d=$3&id=$4 [L]

这会在内部更改所有内容,以便文件 /blog/post.php 可以处理请求。

于 2012-07-09T20:10:30.697 回答