web-dev-qa-db-ja.com

.htaccessリダイレクトがhttpでは機能するが、httpsでは機能しないのはなぜですか?

単純な.htaccessファイルがあり、httpバージョンのサイトでは適切に機能しますが、httpsにアクセスすると機能しません。どうして?

RewriteEngine on
#This is so if the file exists then use the file
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ %{REQUEST_FILENAME} [L]

#These conditions check if a file or folder exists just for reference
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d

#if someone adds ".php" to the slug get rid of it
RewriteRule ^(.*)\.php$ $1  

#don't add the [R] here because we don't want it to redirect
RewriteRule ^(.*)$ index.php?id=$1 [L,QSA]
10
Sheldon McGee

100%十分な情報はありませんが、通常のデフォルトのSSLセットアップ(Red Hat/CentOS/Fedoraなど)では、SSLのVirtualHostが独自のコンテナーにセットアップされています。 mod_rewriteを使用するには、ドキュメントルートで動作するために、少なくとも "AllowOverride FileInfo"を設定する必要があります。

SSLの構成を確認し(デフォルトでは/etc/httpd/conf.d/ssl.conf)、次のようになっていることを確認します。

DocumentRoot /var/www/html
<Directory /var/www/html>
  AllowOverride FileInfo
</Directory>

AllowOverrideのデフォルトは「なし」であるため、FileInfo機能を追加する他の設定(「すべて」など)は問題ありません。

http://httpd.Apache.org/docs/2.2/mod/core.html#allowoverride

20
user15590

HTTPSサーバーでmod_rewriteが有効になっていないか、.htaccessが使用されていない可能性がありますか?

通常のサイトで使用されているAllowOveride権限を確認し、SSLバージョンと比較します。おそらく、事故ではないとしても、セキュリティを向上させるために導入されました。

mod_rewriteは必須の次ですが、適切なホスティングプロバイダーはこれを整理するのに役立ちます。

4
Orbling

「Apache2 + Ubuntuでの作業」

Slim frameworkを使用していて、URLに必要なindex.phpを削除しようとしたときに、同様の問題が発生しました。 reWriteはhttpでは完全に機能しましたが、httpsでは機能しませんでした。URLが見つからないことを示していたため、reWriteは機能していませんでした。

いくつかのヒットアンドトライアルの後、私はこの解決策を思いつきました:

 cd /etc/Apache2/sites-enabled
 Sudo vim default-ssl

AllowOverride NoneをAllに変更します。同様にSudo vim ssl

1
mareenator

私は同様の問題を抱えていました、これは私のために働いたものです。

Httpd.confに、次の両方があることを確認してください:

ServerName domain.com

ServerAlias www.domain.com

0
Yoni Hassin