
CentOS 7とApache 2.4で実行されているWebアプリケーションは、最近のドメイン名olddomain.com
をnewdomain.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/testbadlink
Webブラウザに入力します。ログ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]
ここ。この場合に便利です。
答え2
.hataccessが正しく機能するためには、 "rewrite"モジュールを有効にする必要があります:
a2enmod rewrite
service httpd restart