2012-07-09 57 views
4

我有一个重写规则的设置来改变使用.htaccess更改正在显示的URL,但不实际重定向内容?

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

但有浏览器显示类似

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

简单的URL我读一些有关使用的ProxyPass地方,但我不太知道我”在做:P

我希望人们能够访问post.php网址的查询字符串,或干净的网址与花哨的shmancy子目录的日期和获得相同的内容所有在显示到底干净URL。

回答

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/##/##/##/##.php 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] 

这改变了一切回到国内,以使文件/博客/后。 PHP可以处理请求。

+0

如果我直接进入干净/漂亮的URL,但不使用凌乱的URL时,该方法可行。它重定向到'http://kn3rdmeister.com/blog/GET/2012/07/06.php?y = 2012&m = 07&d = 06&id = 5'。但这并不重要,因为我将发布并共享干净的URL,并且它们的工作非常出色。 – mcneiljm 2012-07-10 20:26:19

+0

对不起,我已经关闭了,看到编辑到'/ blog /%1 /%2 /%3 /%4.php'这行,应该是'/ blog /%2 /%3 /%4/%5.php' – 2012-07-10 20:39:05

+0

是的,这是更好:)再次感谢所有的帮助。 – mcneiljm 2012-07-10 22:32:54