当有人http://holtplantandmachinery.co.uk/category.php?name=wheel-loaders
在浏览器的 URL 地址栏中键入内容时,发送到holtplantandmachinery.co.uk服务器的请求如下所示:
GET /category.php?name=wheel-loaders HTTP/1.1
Host: holtplantandmachinery
some other headers
etc
您可以使用%{THE_REQUEST}
var 匹配第一行:
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ category\.php\?name=([^&\ ]+)
RewriteRule ^ /cat/%2? [L,R=301]
这会将请求重定向到,http://holtplantandmachinery.co.uk/cat/wheel-loaders
并且该 URL 将显示在浏览器的 URL 地址栏中。您使用%{THE_REQUEST}
而不是的原因%{QUERY_STRING}
是因为当您的其他规则将更好看的 URL 重写为带有查询字符串的 URL 时,它会看起来并且%{QUERY_STRING}
匹配,该规则将被应用并导致重定向循环。或者,您可以匹配查询字符串并使用:
RewriteCond %{ENV:REDIRECT_STATUS} !200
确保 URI 不是来自先前重写的内部重定向。
然后你会有你的内部重写规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?cat/(.*)$ /category.php?name=$1 [L]