2

最もかわいい URL を取得したり、SEO の重複を防止したりするために、複数の書き換えルールとリダイレクトを備えた Apache 構成があります。例としてスニペットを次に示します (さらに多くの機能があります)。

# Redirecting non-www to www 
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

# Removing index.php
RewriteCond %{REQUEST_URI} index\.php$ [NC]
RewriteRule .* / [R=301,L]

# A big bunch of these
Redirect permanent /old-article.html  http://www.example.com/new-article.html
Redirect permanent /another-old-article.html  http://www.example.com/new-article2.html

これはうまく機能しますが、たまたま多くのリダイレクトが生成されます。一般的なケースは次のようになります。

http://example.com/index.php, 301 redirect to http://www.example.com/index.php
http://www.example.com/index.php, 301 redirect to http://www.example.com

4 ~ 5 回のリダイレクトに達することもあります。

ここで、これらすべてのルールを連鎖させ、次のように 301 リダイレクトを 1 つだけ生成するようにします。

http://example.com/index.php, 301 redirect to http://www.example.com

ルールをよりよく一致するように考えて並べ替えることに午後を費やすことができ、組み合わせたルールを作成できることもわかっています。しかし、それはすでに長いファイルを複雑にします。フラグ、オペランド、またはすべてのルールを内部のように実行し、すべてのルールをクロールした後にのみリダイレクトを発行するものが必要です。これは可能ですか?

4

2 に答える 2

0

[L]フラグを削除するRewriteRuleと、自動的に結合されます。

于 2012-12-06T02:03:18.540 に答える
0

これを単に並べ替えるだけで、必要なものが得られるようです。

# A big bunch of these
Redirect permanent /old-article.html  http://www.example.com/new-article.html
Redirect permanent /another-old-article.html  http://www.example.com/new-article2.html

# Removing index.php
RewriteRule ^/index.php http://www.example.com/ [R=301,L]

# Redirecting non-www to www 
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

example.comドメインの古い記事の直接リクエスト:

http://example.com/old-article.html

次への単一のリダイレクトになります。

http://www.example.com/new-article.html

http://example.com/index.phpまたは のいずれかに対するリクエストはhttp://www.example.com/index.php、次への単一のリダイレクトになります。

http://www.example.com/

他に一致しないリクエストは、次からの単一のリダイレクトになります。

http://example.com/foo

に:

http://www.example.com/foo

これはすべてのベースをカバーしているようです。私は何かを逃したことがありますか?

于 2012-12-06T01:43:40.957 に答える