web-dev-qa-db-ja.com

.htaccessのないマルチサイト

マルチサイトには.htaccessファイルを使用する必要がありますか?私は基本的なワードプレスサイトをセットアップし、Apache2 VirtualHostを使って次のように設定しました。

<VirtualHost *:80>
    ...
    RewriteEngine On
    Options FollowSymLinks

    # THIS REDIRECTS TO HTTPS
    RewriteCond %{SERVER_NAME} =example.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

    DocumentRoot /var/www/example/
    <Directory /var/www/example/>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>
</VirtualHost>
<VirtualHost *:443>
    ...
    DocumentRoot /var/www/example/
    <Directory /var/www/example/>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>

    SSLEngine on

    Include /etc/letsencrypt/options-ssl-Apache.conf
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>

しかし、マルチサイトを有効にする手順に従うと、wordpressからこれらのオプションを.htaccessファイルに貼り付けるように求められます。

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

しかし、私は.htaccessファイルを持っていません。しかし、それをしてApacheを設定した場合、書き換え規則は機能しません。 example.com/wp-adminは、末尾にスラッシュを付けてwp-admin/に書き換えられるのではなく、醜い長いリンクhttps://example.com/wp-login.php?redirect_to=https%3A%2F%2Fexample.com%2Fwp-admin%2F&reauth=1に書き換えられます。これはSSLの書き換え規則によるものでしょうか。私の質問は:私は.htaccessが必要ですか?そしてどのように私はその書き換え規則を機能させるのですか?

2
Liliane

例えばwpinstance.com/wp-adminは、末尾にスラッシュを付けてwp-admin/に書き換えるのではなく、見にくく長いリンクに書き換えます:https://wpinstance.com/wp-login.php?redirect_to=https%3A%2F%2Fwpinstance.com%2Fwp-admin%2F&reauth=1

コメントで既に述べたように、これは意図的なものです。このための "かわいい" URLはありません。そしてどちらもそうである必要はありません - これは索引を付けられるべきでもリンクされるべきでもありません。

.htaccessが必要ですか?

いいえ、.htaccessは「必要ありません」。

サーバーの設定にアクセスできる場合は、これらのディレクティブを<Directory /var/www/wpinstance/>コンテナー内(<VirtualHost *:443>コンテナー内)にそのまま貼り付けることができます。

しかし、これらのディレクティブを<VirtualHost>コンテナの中に直接貼り付けるには、mod_rewriteは server コンテキストでは( directory または.htaccessコンテキストとは異なる)動作が異なるため、いくつかの変更が必要です。

サーバ設定を変更するたびに、Apacheを再起動する必要があります。 .htaccessファイルを変更したときにApacheを再起動する必要はありません。

私はMultiViewsを無効にすることも検討します。すなわち。 MultiViewsディレクティブからOptionsを削除します。 (MultiViewはmod_rewriteと衝突する可能性があります - あなたがしていることによって異なります。)

.htaccessファイルを使用しない場合は、それらを無効にする必要があります。

AllowOverride None

更新:

私はApache/2.4.18を使っています

OrderおよびAllowディレクティブはApache 2.4では推奨されておらず、将来のバージョンでは削除される予定です。次の(Apache 2.2以前の)ディレクティブを変更する必要があります。

Order allow,deny
Allow from all

読むために:

Require all granted

apache 2.4以降

3
MrWhite