1

シナリオ:

多くの書き換えを処理している.htaccessファイルがあります(PHPでは可能/簡単になることを認識しています)

すべて が正常/some/fake/dir/foobarに機能し、内部で次のように書き直されました

/index.php?some=fake&dir=foobar

クエリ文字列を含むURLはすべて削除されました

そのため、宣言された条件に一致しないIPについては、「近日公開ページ」または「メンテナンス中ページ」を作成したかったのです。

私が試したことの例:

私はこのようなものと他のいくつかのバリエーションを試しました。

# IF not from DEV address
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$
# AND not for comingsoon page or other assets
RewriteCond %{THE_REQUEST} !\?comingsoon [OR]
RewriteCond %{REQUEST_URI} !^/comingsoon
# THEN send them to comingsoon page
RewriteRule ^ /comingsoon [R,L]

条件を満たすために、.htaccessファイルのすべての潜在的な領域でそれを試しました。

問題はリダイレクトループの取得にあるようです。apacheログには、/comingsoonページを要求してからルートディレクトリにリダイレクトすることが示されます//foo/barの内部変換のためだと思い/?foo=barます。/しかし、「ゴースト」ページにリダイレクトされる場所を理解する方法がわかりません。/comingsoon

以下は.htaccessファイルのレイアウトです:(問題を理解する時間を節約するためにコードは省略されています)

Options -Indexes
RewriteEngine on 

RewriteBase /

# Forced https (should not effect the problem)
[...]
# To externally redirect /dir/index.php to /dir/
[...]
# To externally redirect /dir/foo.php to /dir/foo
[...]
# To internally redirect /dir/foo to /dir/foo.php
[...]
# Prevent Rewrite on existing directories, files, and links
[...]
# Remove query string
[...]
# To internally rewrite directories as query string
[...]
# Custom error documents

解決するために完全な.htaccessが必要な場合はコメントしてください。ありがとう!

/編集:

私のスクリプトは既存のファイルの書き換えが要求されないようにするため、「実際の」ファイルで正常に動作するようになっていることに注意してください。これは私が探している解決策ではありません。私のメインインデックスファイルは、request_uriがクエリ文字列を介して何に書き換えられるかに応じて動的コンテンツを提供しています

4

1 に答える 1

0

まあ、私はそれを解決したと思います。隠しクエリ文字列の%{THE_REQUEST}HEADERSをチェックする必要がありました?comingsoon

誰かがこの問題に遭遇した場合、私が追加したファイルまたはディレクトリのホワイトリストを見ることができます:)

# IF not from DEV address
RewriteCond %{REMOTE_ADDR} !^127\.0\.5\.1$
# AND not for comingsoon page or other assets
RewriteCond %{THE_REQUEST} !^GET\s(?:/\?comingsoon|/comingsoon|/assets/|/favicon\.ico|/google[A-Za-z0-9]+\.html) [NC]
# THEN send them to comingsoon page
RewriteRule ^ /comingsoon [R,L]
于 2013-03-05T08:37:35.683 に答える