CentOS 7で.htaccessがリクエストをリダイレクトしないのはなぜですか?

CentOS 7で.htaccessがリクエストをリダイレクトしないのはなぜですか?

CentOS 7とApache 2.4で実行されているWebアプリケーションは、最近のドメイン名olddomain.comnewdomain.com。アプリケーション構造newdomain.comはの構造とは異なるolddomain.comため、すべての要求はolddomain.com/anyurlルートURLにリダイレクトする必要がありますnewdomain.com

.htaccess新しいファイルを作成してhttpd再開しましたが、なぜolddomain.com/testbadurlリクエストにリダイレクトできないのですかnewdomain.com 代わりに、ユーザーには404エラーしか表示されませんolddomain.com/testbadurl

コマンドラインで実行する手順は次のとおりです。

# nano /etc/httpd/conf/httpd.conf

    <Directory "/var/www/html">
        AllowOverride All
    </Directory>

# sudo systemctl restart httpd
# cd /var/www/html

# nano /var/www/html/.htaccess

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !^olddomain\.com$ [NC]
    RewriteRule ^(.*)$ http://newdomain.com [R=301,L]

# systemctl restart httpd

その後、テストユーザーはolddomain.com/testbadlinkWebブラウザに入力します。ログnano /var/log/httpd/olddomain_com_requests.logには404 error


答え:


VirtualHost@garethTheRedはファイルのガイドラインについて考えさせhttpd conf、結果として次の答えを定式化し、効果があり、問題を解決しました。

<VirtualHost www.olddomain.com:80>
    ServerName www.olddomain.com
    ServerAlias olddomain.com
    ErrorLog /var/log/httpd/olddomain_com_error.log
    CustomLog /var/log/httpd/olddomain_com_requests.log combined
    RedirectMatch ^(.*)$ http://newdomain.com
</VirtualHost>  

httpd confファイルへの外部アクセスを許可するよりも、ファイルにそれを実行させる方が安全であることに注意してください.htaccess

ベストアンサー1

私は手すりの上に頭を置き、この答えをします。結局のところ、答えは削除される可能性があります!

Apacheはあまり明確に定義されていない順序でモジュールを処理します。処理手順を確認できます。できるようにするこのmod_infoモジュール。 Fedora 22をインストールすると、以下が表示されます(完了)。

Post-Read Request: 
   -10 mod_http2.c 
   00 mod_headers.c 
   00 mod_remoteip.c 
   00 mod_proxy.c 
   10 mod_auth_digest.c 
   10 mod_http2.c 
   10 mod_reqtimeout.c 
   10 mod_setenvif.c 
   10 mod_unique_id.c 
Header Parse: 
   10 mod_setenvif.c 
HTTP Scheme: 
   30 http_core.c 
Default Port: 
   30 http_core.c 
Quick Handler: 
   00 mod_cache.c 
   00 mod_lua.c 
Translate Name: 
   -1 mod_lua.c 
   00 mod_rewrite.c 
   00 mod_proxy.c 
   00 mod_proxy_express.c 
   10 mod_alias.c 
   10 mod_userdir.c 
   10 mod_vhost_alias.c 
   10 mod_lua.c 
   21 mod_lua.c 
   30 core.c 

mod_proxy.cリストの最初の項目であることがわかります。

私の(非常に限られた)理解は、プロキシ設定が最初に処理され、WARファイルが返される時点でオーバーライドが適用されないことです。

Apacheのドキュメントで説明されているように、およびmod_rewriteフラグのみを使用してプロキシを実行する方法はいくつかあります。[P]ここ。この場合に便利です。

おすすめ記事