1

我现在有来自同一个文件的 4 个 url:

所有这些链接都有效..

我的 htaccess:

RewriteEngine On
RewriteRule ^picture/([^/]*)$ /picture.php?name=$1 [L]

在我的 php 文件顶部(用 - 替换空格)

$name  = str_replace('-', ' ', $_GET['name']);
$name  = mysql_escape_string($name);
$pic = mysql_query("SELECT * FROM pics WHERE name = '$name'") or die(mysql_error());

但我只想使用:http ://domain.com/picture/kim-kardashian ,如何使用 htaccess 或 php 将所有其他 url 重定向到这个?

谷歌会索引所有这些网址还是只是http://domain.com/picture/kim-kardashian

4

1 回答 1

1

在您拥有的规则之前添加这些规则:

RewriteCond %{THE_REQUEST} ^(GET|POST)\ (.*)%20(.*)\ HTTP
RewriteRule . %2-%3 [R=301,NE]

RewriteCond %{THE_REQUEST} ^(GET|POST)\ /picture.php\?
RewriteCond %{QUERY_STRING} ^name=([^&]+)&?(.*)
RewriteRule . /picture/%1?%2 [R=301]

条件匹配,%{THE_REQUEST}因此我们不匹配重写的 URI(如您的规则重写的),并且我们匹配实际请求的 URI。第一个重定向带有空格的 URI 以替换为破折号(一次一个),第二个查找请求profile.php并重定向到 URI 的 SEO 友好版本。在客户端获得 301 重定向后,您的规则将在内部重写回 picture.php。

由于 301 重定向,Google 为前 3 个 URI 提供的任何链接最终都会映射到第 4 个。

于 2012-06-17T15:24:45.513 回答