如果您转到如下url:http://stackoverflow.com/questions/9155602/,地址栏将更新为http://stackoverflow.com/questions/9155602/redirect-existing-file-to-different-url-using-mod-rewrite。这不是用JavaScript完成的,也不是通过硬刷新完成的,我最好的猜测是它是用mod_rewrite完成的;然而,如果没有服务器端的处理,它怎么知道文章的标题呢?
我刚刚更新了我的网站,使用搜索引擎优化友好的网址,它以前是/shows.php?id=review-1,现在是/review/1/super-baseball-2020。当涉及到我的重写时,末尾的文本实际上并不重要,即:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9]+)/([0-9]+)/([a-z0-9-]+)?/?$ /shows.php?id=$1-$2 [L,NC]我目前的方法是确保Google不会因为重复的内容而攻击我,并且确保书签得到正确的转发:
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=review-1(?:&|$) [NC]
RewriteRule ^ /review/1/super-baseball-2020/? [R=301,L,NC]
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=review-2(?:&|$) [NC]
RewriteRule ^ /review/2/aero-fighters-2/? [R=301,L,NC]
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=review-3(?:&|$) [NC]
RewriteRule ^ /review/3/aero-fighters-3/? [R=301,L,NC]
.... and so on ....这种解决方案非常短视,需要在我的.htaccess中输入数千行代码。
发布于 2012-02-07 06:43:07
没有服务器端处理怎么知道文章的标题?
mod_rewrite只能做这么多。另外,你还得更新太多。最好使用脚本来处理这些请求。创建一个.htaccess,类似于您所做的操作:
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php [QSA,L]
</IfModule>然后在您的index.php中,拆分REQUEST_URI以解析出/review/1/,在数据库中查找id为1的评论标题,将其传递给友好的URI (slug)函数,并将其附加到url,然后重定向。
发布于 2012-02-07 06:45:00
我还为我们的节目创建了一个SEO友好的URL解决方案。URL自然是/raido/epsede.php?SeriesId=1&EpisodeId=123,但我也想要/raido/1-123-live.htm,所以我的.htaccess是这样的:
RewriteRule ^\d{1,3}-\d{1,4}(.+).html$ episode.php?Slug=$0
然后让目标页面来处理它。
if ($Slug !== "") {
$lIds = explode("-", $Slug);
$SeriesId=$lId[0];
$EpisodeId=$lIds[1];
}这还允许您继续接受现有的链接,而不必拥有相同代码的2个版本。
发布于 2012-02-07 06:49:55
对于重复的内容,你应该在头部有一个规范的链接标签。规范链接标签将告诉google当前页面具有与规范链接相同的内容的替代url,并且该内容的主url是规范链接。这对于像分页内容、搜索等相同页面可能有不同urls的地方来说是很棒的。
<link rel="canonical" href="http://www.somedomain.com/mainurl" />https://stackoverflow.com/questions/9168364
复制相似问题