我一直在使用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
答案 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
避免无限循环。