2

RewriteRuleでワイルドカードとして^vsを使用することの違いは何ですか?^(.*)$^.*$

私の目標は、http://carnarianism.com/ (何でも) をhttp://carnarian.com/のランディング (デフォルト) ページにリダイレクトすることです。次の解決策を見つけましたが、どれもうまくいくようですが、どちらがパフォーマンスに優れているのでしょうか?

RewriteRule ^ http://carnarian.com/ [R=301,L]
RewriteRule ^.*$ http://carnarian.com/ [R=301,L]
RewriteRule ^(.*)$ http://carnarian.com/ [R=301,L]

これらはすべて正常に動作しているようです。これは StackOverflow に関する私の最初の投稿です。ほとんどの場合、検索するだけで答えを見つけることができます。

明確にするために: 私の .htaccess で問題の RewriteRule の上にあるのは、次のように RewriteCond と WWW ハンドラーです。

RewriteEngine On
RewriteBase /

# FROM www. --TO-- NO www.  See no-www.org
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{HTTP_HOST} carnarianism\.com$ [NC]
########## The Above Questioned RewriteRule ??? ##########
RewriteRule ^ http://carnarian.com/ [R=301,L]

注: この検索は次のように開始しましたが、パスも渡されたため、次は必要ありませんでした。また、ランディング ページのみに移動する必要があります。したがって、$1 変数を使用できるようにするには括弧が必要です。$1 変数は必要ありません。

RewriteRule ^(.*)$ http://carnarian.com/$1 [R=301,L]
4

2 に答える 2

5
  • ^後方参照として元の URL にアクセスできないようにします。$0空文字列です。
  • ^.*$元の URL 全体を後方参照としてアクセスできるようにし$0ます (そのため、たとえば を実行できますhttp://example.com/oldurl.php?url=$0) 。
  • ^(.*)$0と後方参照の両方で元の URL 全体にアクセスできるようにし$1ます。通常、古い URL を実際に置き換えて使用したい場合に使用されます。使用方法がより明確であるためです。

それらはすべて同じものに一致しますが、異なる後方参照グループを生成します。

于 2012-10-16T04:35:52.883 に答える
1

パフォーマンスが優れているのは、自分でベンチマークしたものです。

しかし、.htaccess一度だけ解析されるこの構成をサーバーに直接 (おそらく VirtualHost 経由で) 持つのではなく、ファイルを使用しているため、実際には問題ではありません。リクエストごとにファイルを解析.htaccessするのは、正規表現を何千倍も実行するよりもはるかに時間がかかります。

パフォーマンスが気になる場合は、.htaccessファイルを決して使用しないでくださいAllowOverride None。それらを無効にせず、次のようなリクエストがあります:http://example.com/sites/css/theme/main.cssApacheは引き続き次のすべてのファイルをロードしようとします:

  • .htaccess
  • sites/.htaccess
  • sites/css/.htaccess
  • sites/css/theme/.htaccess

それらのファイルが存在しない場合でも、システム コールが生成されます。

RewriteRuleしたがって、ファイルを改善しようとすること.htaccessは、塩分を減らしたいと思って海でくしゃみをするようなものです. :)

ここで、サーバー構成を使用して元の質問に答えるようにセットアップを改善した場合^.*$: ^(.*)$ただし、測定できない可能性が高いです。

于 2013-05-22T11:37:20.817 に答える