使用锚点扩展简单的ReWriteRule

时间:2012-03-17 13:13:50

标签: .htaccess mod-rewrite

您好,来自澳大利亚中部,谢谢您的帮助

我有一个像这样的简单重写

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
  • 它也会抛锚(#123)
  • 123可以是任何数字,并且始终与锚
  • 相同
  • 同时仍然保留第一个功能
  • 它也可以使用像Civil-Celebrant而不是Plumber
  • 这样的网址

e.g

http://website.com/Trades-Services-Civil-Celebrant-123
to
http://website.com/Trades-Services.php?cat=Civil-Celebrant&ad=123#123

三江源

1 个答案:

答案 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