0

これを十分に説明できることを願っています!

ユーザーを別のサーバー上の同じページにリダイレクトするために使用している Apache の下のサイトの RewriteRules があります。2 つの例外があります。元のサーバーにアクセスするには 2 つの IP アドレスを通過させる必要があり、特定のパスにルールを適用したくありません。これが私の現在のルールセットです:

RewriteCond %{REMOTE_HOST} !^10\.10\.10\.1(0|1)$
RewriteRule ^page/old/url/1$ http://www.site.com/new/url/1 [R=301,L]

# If the user is trying to get to /admin, let it past by skipping the next rewriterule
RewriteCond %{REQUEST_URI} ^/admin(|.*)$
RewriteRule ^.*$ - [S=1]

# Catch-all to send any "un-mapped" pages to the homepage
RewriteCond %{REMOTE_HOST} !^10\.10\.10\.1(0|1)$
RewriteRule ^ http://www.site.com/homepage [R=301,L]

# Other rules follow, but no redirections

したがって、htaccess で 2 つの IP アドレスを除くすべてのユーザーを新しいサイトの場所にリダイレクトする必要があります。ただし、誰でも/adminにアクセスできるようにしたいと思います。次に、特にリダイレクトされていないページをピックアップするキャッチオール ルールがあります。

REQUEST_URI 行が一致していないか、スキップ ルールが機能していないようです。私が見逃している明らかなものはありますか?

4

1 に答える 1

2

最初に書き換えたくない条件をキャッチする方が簡単に思えます。そうすれば、他のルールでそれらについて心配する必要がなくなります。

このようなもの:

#Don't rewrite known IPs or path /admin
RewriteCond %{REMOTE_HOST} ^10\.10\.10\.1(0|1)$ [OR]
RewriteCond %{REQUEST_URI} ^/admin($|\/|\/.*)
RewriteRule ^.*$ - [NC,L]

# Redirection rules
RewriteRule ^page/old/url/1/?$ http://www.site.com/new/url/1 [R=301,NC,L]
RewriteRule ^page/old/url/2/?$ http://www.site.com/new/url/2 [R=301,NC,L]
# Catch all
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]
于 2012-12-21T18:34:07.747 に答える