【发布时间】:2012-06-14 01:09:13
【问题描述】:
我在重定向通配符子域和处理内部 URL 缩短器时遇到问题。
假设我的应用中有一个内部 URL 缩短器
example.com/b/ABCDE
会翻译
example.com/book/12345678-the-book-name
/b/ 引用的脚本(我使用可以处理 URL 规则的 PHP 框架)会将短 ID ABCDE 转换为书的真实 ID 12345678(以及标题“书名”),然后将其重定向到图书的永久网址example.com/book/12345678-the-book-name
因此,每次我在公告板、微博网站或海报或名片等物理媒体上传播有关书籍的链接时,我都会使用短链接(example.com/b/ABCDE)而不是永久链接(example.com/book/12345678-the-book-name)。
接下来,我需要将所有通配符子域重定向到主域(www.example.com),同时维护请求 URI,例如
http://random.example.com/book/11111111-some-book -> http://www.example.com/book/11111111-some-book
http://123456.example.com/book/22222222-another-book -> http://www.example.com/book/22222222-another-book
http://abcdefg.example.com/book/33333333-another-book-again -> http://www.example.com/book/33333333-another-book-again
在我使用的所有规则之后添加以下规则
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.example.com [NC]
RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301]
</VirtualHost>
因此,带有 example.com 域且没有前缀的 url 如下所示
http://example.com/book/11111111-some-book
将转换为
http://www.example.com/book/11111111-some-book
而且,另一个后果是,如果内部 URL 缩短器使用没有前缀的普通域,则需要两次重定向才能解决。例如,
http://example.com/b/ABCDE
将首先被重定向到
http://www.example.com/b/ABCDE
然后被重定向到
http://www.example.com/book/12345678-the-book-name
实际上,我不介意两次重定向。但是我的 SEO 顾问说两次重定向对我网站的 SEO 不利。 (我仍然不知道为什么)
所以我尝试将最后一条规则更改为下面
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteCond %{REQUEST_URI} ^/b/(.*)$
RewriteRule . index.php [L]
RewriteCond %{HTTP_HOST} !^www.example.com [NC]
RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301]
</VirtualHost>
我不太擅长配置 Apache,但是当我在http://htaccess.madewithlove.be/ 中模拟上述规则时,它可以工作。但是当我将它应用到我的服务器时,它给了我 400 Bad Request 用于example.com/p/ABCDE。
所以,我的问题是
- 我的 SEO 顾问对他的论点是否正确?是否有任何解释可以支持他,或者是否有相反的论点?
- 为什么服务器给出400 Bad Request?
- 如何修复重定向?我想保留短 URL(
example.com/b/ABCDE不带www前缀)但仍处于一个重定向中。
【问题讨论】:
-
如果您只有一个 301 重定向,搜索引擎只会看到一个重定向。内部重定向未显示 - 尽管您可能知道这一点。我不知道两个 301 重定向是否比一个更好/更差。
-
你不能只处理来自应用程序的重定向吗?
标签: apache mod-rewrite redirect seo