我有一个网站,我有一个带有mod重写的.htaccess文件,所以我的网站看起来更好一点,更友好的SEO。
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
ErrorDocument 404 /index.php?error=404
RewriteRule ^(admin)($|/) - [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_]+)\.php$ index.php?country=$1
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_A-Яа-я-]+)/([a-zA-Z0-9_-]+)\.php$ index.php?country=$1&id=$3
RewriteRule ^([a-zA-Z0-9_-]+)/(.*)/(.*)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)\.php$ index.php?country=$1&subid=$5&id=$4
RewriteRule ^.+?---(.+)$ images/$1 [L,NE]
Rewriterule ^sitemap.xml$ sitemap.php [L]
正如您在上面的规则中所看到的,有“通配符”意味着在某些正斜杠之间,任何事情都会发生。我使用它的方式是选择语言并将标题命名为页面,以id变量结束以控制数据库中表中要显示的行。例如:
http://www.domain.com/en/heaters/hot-heater/26/60.php
以上网址包含域/ langugage / wildcard / wildcard / id变量/ id变量
现在的问题是,当页面上的链接按标题更新时(假设热水器名称更改为热红色加热器),Google索引的网址不一样,两个网址仍然有效。
我想知道如何使用mod重写自动将通配符更新为正确的标题。就像在Stackoverflow上一样,URL在URL中具有此问题的标题 - 如果我在URL中更改此URL,则URL会自动将其更改回原始标题。这是怎么做到的?
提前多多谢谢。
答案 0 :(得分:1)
如果您需要具有与Stackoverflow URL相同的行为,那么您还需要一些服务器端支持(例如PHP)。请考虑以下代码段:
<强> htaccess的:强>
RewriteEngine On
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?id=$1&title=$2 [L,QSA]
<强>的index.php:强>
<?php
$id = $_GET['id'];
$title = $_GET['title'];
$dbTitle = // get title by doing a database query using $id
// ...
if ($title != $dbTitle) {
// redirect with 301 to correct /<id>/<title> page
header ('HTTP/1.1 301 Moved Permanently');
header('Location: /' . $id . '/' . $dbTitle);
exit;
}
// rest of your script
?>
这将支持类似于SO的网址,即/id/some-title