5

ワイルドカードサブドメインのリダイレクトと内部URL短縮サービスの受け渡しに問題があります。

アプリに内部URL短縮サービスがあるとしましょう

example.com/b/ABCDE

それは翻訳されます

example.com/book/12345678-the-book-name

によって参照されるスクリプト/b/(URLルールを処理できるPHPフレームワークを使用)は、短いIDABCDEを本の実際のID 12345678(およびタイトル「本の名前」)に変換してから、本の永続的なURLにリダイレクトします。example.com/book/12345678-the-book-name

そのため、掲示板、マイクロブログサイト、ポスターや名刺などの物理メディアなどのWebサイトで本に関するリンクを広めるたびに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短縮サービスがプレフィックスのないプレーンドメインを使用する場合、解決には2つのリダイレクトが必要になります。例えば、

http://example.com/b/ABCDE

最初にリダイレクトされます

http://www.example.com/b/ABCDE

その後、にリダイレクトされます

http://www.example.com/book/12345678-the-book-name

実際、2回のリダイレクトは気になりません。しかし、私のSEOコンサルタントは、2回のリダイレクトは私のサイトの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の不正な要求が発生しましたexample.com/p/ABCDE

だから、私の質問は

  1. 私のSEOコンサルタントは彼の議論について正しいですか?彼を裏付けることができる説明はありますか、それとも反論がありますか?
  2. サーバーが400の不正なリクエストを出したのはなぜですか?
  3. リダイレクトを修正するにはどうすればよいですか?example.com/b/ABCDE短縮URL(プレフィックスなし)を維持したいwwwが、それでも1つのリダイレクトで。
4

1 に答える 1

3

あなたはSEOコンサルタントですか?

すべてのSEOと同様に、答えにはいくつかの推測と仮定が含まれますが、彼はおそらく正しいでしょう。

ページをリダイレクトするときは、最初のページを忘れて後で戻ってターゲットページのインデックスを作成するようにクローラーに指示します。これにより、ページが最初に世界に紹介されてから実際に検索に表示されるまでに遅延が発生します。結果。2つのリダイレクトは、その遅延を2倍にすることを意味します。検索エンジンの「ムード」によっては、SEOが大幅に低下する可能性があります(または、検索エンジンがリダイレクトを並べ替えるときに、インデックスに登録されたURLが混乱する可能性があります)。

400の応答を得る理由

RewriteRuleのドキュメントを確認する場合は、サーバーごとの構成の内部に入力してください

与えられたルール ->結果の置換
^/somepath(.*) --> otherpath$1 :無効、サポートされていません
^/somepath(.*) --> /otherpath$1/otherpath/pathinfo

つまり、vhost confでは、置換の絶対パスを指定する必要があります(Apacheに返される最後のパス、前のパスは好きなものにすることができます)。400エラーを解決するには:

RewriteRule . /index.php [L]

リダイレクトを修正する方法

index.phpがリダイレクトを構築する方法によって異なりますが、

ServerName www.example.com
UseCanonicalName On

に設定さ$_SERVER["SERVER_NAME"]www.example.com、正規ドメインを指すURLになります。

潜在的なconf

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias *.example.com example.com

    UseCanonicalName On
    RewriteEngine on

    #set the document root
    DocumentRoot /path/to/the/app 

    # if something goes wrong, setup logs to track what happens
    # comment these lines when you're done
    ErrorLog /a/path/to/a/log/file

    RewriteLogLevel 5
    RewriteLog /a/path/to/another/log/file

    # I simplified the conditions, those are equivalent to your rules
    # a RewriteRule tries to match against %{REQUEST_URI}
    RewriteCond %{HTTP_HOST} ^example\.com [NC]
    RewriteRule ^/b/ /index.php [L] 

    RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
    RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301]
</VirtualHost>
于 2012-06-13T08:58:43.157 に答える