Mod_rewrite" Canonical URL' st"

时间:2012-01-20 00:14:31

标签: mod-rewrite url-rewriting

Hy,我如何使用mod_rewrite制作规范网址(适用于Facebook“Parsing”)。

实施例: 我有: example.com/index.php?page=eventdetails&id=241

我会制作一个canonincal网址,它应该是这样的:

example.com/ eventdetails / 241 / 一些可以从脚本中忽略的文字

我用这个例子测试了它,但它不起作用:

RewriteEngine on
RewriteRule ^/eventdetails/([0-9]+)/$ index.php?show=eventdetails&id=$1

.htaccess文件处于“主页”方向。

我没有找到任何针对此示例@google的解决方案,所以我希望有人可以帮助我!

1 个答案:

答案 0 :(得分:7)

试试这个:

RewriteEngine on
RewriteBase /
RewriteRule ^eventdetails/([0-9]+)/?$ index.php?show=eventdetails&id=$1 [L,NC]
RewriteRule ^eventdetails/([0-9]+)/([a-z0-9\-_]+)/?$ php.php?show=eventdetails&id=$1&name=$2 [L,NC]

/?表示最后的/。因此example.com/eventdetails/241/example.com/eventdetails/241适用于此规则。如果事件名称不使用,第一个规则将仅使用第一个规则。

此Url将使用第二个(如果使用事件名称):example.com/eventdetails/241/event-name/。现在在这里,我不推荐+,因为它不是真正的SEO友好,也许有些人会接受它,但有些人不会。我推荐使用-

我添加了L,以防你有其他规则和非标志的NC标志。

L: [L]标志使mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。这对应于Perl中的最后一个命令,或C中的break命令。使用此标志指示应立即应用当前规则而不考虑进一步的规则。

NC :使用[NC]标志会使RewriteRule以不区分大小写的方式匹配。也就是说,它不关心字母在匹配的URI中是以大写形式还是小写形式出现。

来自:http://httpd.apache.org/docs/2.3/rewrite/flags.html