mod_rewrite问题:URL仍显示url中的php变量

时间:2011-04-18 23:37:55

标签: mod-rewrite

我一直在使用mod_rewrite,似乎无法让URL显示得很好,仍然在网址中显示php变量。

这是当前的htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^/display/([^/]+)$/([^/]+)\$ http://www.mydomain.tld/display.php?photo_id=$1&photo_size=$2 [NC]

基本上,我已经尝试了一切,以获得如下所示的干净网址: http://www.mydomain.tld/display/3456/large

3 个答案:

答案 0 :(得分:0)

不知道,如果那确实是问题,但似乎有反斜杠和美元符号过多

^/display/([^/]+)$/([^/]+)\$
                 |        |

^/display/([^/]+)/([^/]+)$

答案 1 :(得分:0)

如果你在浏览器中输入URL,那么重写就行了。所以mod_rewrite正在做它的工作,但是当用变量访问时它不会重写URL:

http://www.domain.tld/display.php?photo_id=2304&photo_size=Large(不重写) http://www.domain.tld/display/2304/Large(输入时有效)

我错过了什么地方吗?

使用下面的信息,仍然没有重定向,不确定我是否在某处错误地放置了代码,或者在apache内部是否破坏了mod_rewrite。

答案 2 :(得分:0)

您的重写规则说您将http://www.domain.tld/display/2304/Large重写为http://www.domain.tld/display.php?photo_id=2304&photo_size=Large(意味着第一个存储在第二位)

如果您希望将http://www.domain.tld/display.php?photo_id=2304&photo_size=Large键入的用户重定向到http://www.domain.tld/display/2304/Large,则需要:

RewriteCond %{QUERY_STRING} ^photo_id=([0-9]+)&photo_size=(.*)$
RewriteRule display.php /display/%1/%2 [R,L] #R to redirect, and then change the URL in the browser

并且您必须添加类似

的内容
RewriteCond %{REDIRECT_URL} !^display.php$
RewriteRule ^/display/([^/]+)/([^/]+)$ display.php?photo_id=$1&photo_size=$2

避免无限循环。