首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何重写像stackoverflow这样的SEO友好的网址

如何重写像stackoverflow这样的SEO友好的网址
EN

Stack Overflow用户
提问于 2012-02-07 06:34:59
回答 5查看 3.9K关注 0票数 4

如果您转到如下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。当涉及到我的重写时,末尾的文本实际上并不重要,即:

代码语言:javascript
运行
复制
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不会因为重复的内容而攻击我,并且确保书签得到正确的转发:

代码语言:javascript
运行
复制
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中输入数千行代码。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-07 06:43:07

没有服务器端处理怎么知道文章的标题?

mod_rewrite只能做这么多。另外,你还得更新太多。最好使用脚本来处理这些请求。创建一个.htaccess,类似于您所做的操作:

代码语言:javascript
运行
复制
<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,然后重定向。

票数 2
EN

Stack Overflow用户

发布于 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

然后让目标页面来处理它。

代码语言:javascript
运行
复制
if ($Slug !== "") {
  $lIds = explode("-", $Slug);
  $SeriesId=$lId[0];
  $EpisodeId=$lIds[1];
}

这还允许您继续接受现有的链接,而不必拥有相同代码的2个版本。

票数 2
EN

Stack Overflow用户

发布于 2012-02-07 06:49:55

对于重复的内容,你应该在头部有一个规范的链接标签。规范链接标签将告诉google当前页面具有与规范链接相同的内容的替代url,并且该内容的主url是规范链接。这对于像分页内容、搜索等相同页面可能有不同urls的地方来说是很棒的。

代码语言:javascript
运行
复制
<link rel="canonical" href="http://www.somedomain.com/mainurl" />
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9168364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档