您好,来自澳大利亚中部,谢谢您的帮助
我有一个像这样的简单重写
RewriteEngine on
RewriteRule Trades-Services-(.*) Trades-Services.php?cat=$1 [L,NC]
这样做会像这样转换URL
http://website.com/Trades-Services-Plumber
进入这个
http://website.com/Trades-Services.php?cat=Plumber
我希望的是进一步(或称赞)重写规则,以便将其转变为
http://website.com/Trades-Services-Plumber-123
进入这个
http://website.com/Trades-Services.php?cat=Plumber&ad=123#123
e.g
http://website.com/Trades-Services-Civil-Celebrant-123
to
http://website.com/Trades-Services.php?cat=Civil-Celebrant&ad=123#123
三江源
答案 0 :(得分:1)
要进行大量重写,您需要更改现有规则并添加额外的规则来处理第二种情况:
RewriteEngine on
RewriteRule ^Trades-Services-(.+)-([0-9]+)$ /Trades-Services.php?cat=$1&ad=$2 [L,NC]
RewriteRule ^Trades-Services-(.+)$ /Trades-Services.php?cat=$1 [L,NC]
这应该涵盖您的4个要求中的3个,但第一个要求除外:
它也会抛锚(#123)
URL片段#123 位由浏览器处理,当url中包含#name时,#name片段永远不会发送到服务器。所以服务器无法知道片段,这是浏览器看到的东西,浏览器寻找文档中的锚点。您可以做的是重定向以获取锚点。第一条规则如下:
RewriteRule ^Trades-Services-(.+)-([0-9]+)$ /Trades-Services.php?cat=$1&ad=$2#$2 [L,NC,R]
但是,当有人在浏览器的地址栏中输入 http://website.com/Trades-Services-Plumber-123 时,该规则会将浏览器重定向到 http:// website.com/Trades-Services.php?cat=Plumber&ad=123#123 ,因此浏览器地址栏中的内容会更改为php URI。这与原始规则中的行为不同(在服务器端内部重定向,保留浏览器地址栏中的内容)。您可以做的另一件事是当您生成 http://website.com/Trades-Services-Plumber-123 等链接时,请确保添加了一个片段: http:/ /website.com/Trades-Services-Plumber-123#123