Mod Rewrite会自动更新URL

时间:2014-11-04 10:22:13

标签: regex apache .htaccess mod-rewrite redirect

我有一个网站,我有一个带有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会自动将其更改回原始标题。这是怎么做到的?

提前多多谢谢。

1 个答案:

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