2017-03-17 11 views
1

汎用ルールを使用して、.htaccessを使用するディレクトリまたはサブディレクトリから特定のページにリダイレクトすることはできますか?htaccess内の任意のディレクトリまたはサブディレクトリから特定のページにリダイレクト

私はexample.com/login.php?action=loginにリダイレクトexample.com/loginのようなURLを持つようにしたい場合は、私は私の.htaccessファイルに次の行を使用して、より正確に:

RewriteRule ^login$ /login.php?action=login [L] 

しかし、それがそのルールを持つことが可能ですexample.com/any_directory/loginからexample.com/login.php?action=loginにリダイレクトできますか?だから、どこからでも、サブディレクトリ `` example.com/login.php?action = login`にはexample.comのサブディレクトリがあります。 /foobarに/ログイン:はい、私が行うことができますどのようにこの

答えて

1

確かに可能です。最も簡単なのは、動的コンフィグレーションファイル内でも絶対リクエストパス上で動作するため、書き換え条件を使用することです。

この単純な例を見てみましょう...ルールが複雑なマッチングになり、このような場所私の相対パスで動作するリライト:

RewriteEngine on 
RewriteCond %{REQUEST_URI} /login$ 
RewriteRule^/login.php?action=login [L] 

あなたの代わりにhttpサーバのホスト構成で書き換えを行う場合のことができます。それを単純化する。理由は、ルールがその場所に取り組む常に絶対パスであることである。

RewriteEngine on 
RewriteRule /login$ /login.php?action=login [L] 

両方の変異体の主なアプローチがログインキーワードを先行スラッシュに依存することです。これは常に絶対要求パスにあり、明確にそのキーワードを左区切りにしています。そして、ではなく、は、行開始時のマッチングを主張します。


と一般的なヒント

:あなたは、常に動的な設定ファイル(「.htaccessファイル」)を使用するのではなく、HTTPサーバのホスト設定内のこのようなルールを置くことを好む必要があります。これらのファイルは悪名高いエラーが発生しやすく、デバッグが難しく、サーバーの速度が遅くなります。彼らは、あなたがホスト構成(本当に安いホスティングサービスプロバイダを読む)を持っていないか、独自の書き換えルールを書くことに頼っているアプリケーションを持っている場合にのみ、最後のオプションとして提供されます(これは明白なセキュリティの悪夢です)。

1

あなたはあなたの正規表現パターンを調整する必要がある場合、それは、URI IEでログイン/前anycharsを一致させることができますようにと.Simply、^を削除します。

RewriteRule /login/?$ /login.php?action=login [L] 
+0

これは '/ fakelogin'のようなパターンへのリクエストにもマッチします... – arkascha

+0

@Arkascha:あなたが言っていることを理解しています。/fakelogin。申し訳ありませんが、ログインする前にスラッシュを追加することを忘れた:D – starkeen

関連する問題