.htaccessが動作しないApache


135

Linux ubuntuで実行されているAWS EC2サービスのサーバーがあり、Apache、php、およびmysqlをインストールしました。

.htaccessドキュメントルートにファイルを追加しました/var/www/html

このコードを入力 ErrorDocument 404 /var/www/html/404.phpしましたが、まだ表示されません。

このコマンドを複数回入力し続けました:sudo service httpd restartサーバーを再起動しましたが、変更は表示されませんでした...

どうすれば修正できますか...何か問題がありましたか?

前もって感謝します!


2
400 Bad Requestエラーをマッピングします/var/www/html/404.phpか?
Jon Lin、

回答:


287

まず、.htaccessファイルではhttpdを再起動する必要がないことに注意してください。.htaccessファイルは、特にrootを持たない人向けです。つまり、httpdサーバー設定ファイルにアクセスできず、サーバーを再起動できません。サーバーを再起動できるため、.htaccessファイルは必要なく、メインサーバーの設定を直接使用できます。

次に、.htaccessファイルが無視されている場合は、AllowOverrideが正しく設定されていることを確認する必要があります。詳細については、http://httpd.apache.org/docs/2.4/mod/core.html#allowoverrideを参照してください。また、それが正しいスコープに設定されていることを確認する必要があります。つまり、構成の正しいブロックにあります。たとえば、ブロック内のものを編集していないことを確認してください。

3番目に、.htaccessファイルが実際に読み取られていることを確認する場合は、ゴミを入れてください。.htaccessファイルに「INVALID LINE HERE」などの無効な行があると、そのファイルを含むディレクトリをブラウザーでポイントすると、500サーバーエラーが発生します。そうでない場合は、AllowOverrideが正しく構成されていません。


141
診断ツールとして.htaccessファイルにゴミを入れるための+1。
レトロハッカー2014

46
プログラミングのガベージは、思ったより便利です。
EnKrypt 2014年

1
"A STRING" は.htaccessを入れたのでエラーが表示されたので、Debian AllowOverride Allにすべて入れapache2.confてうまくいきました
Alex

1
ディレクティブでAllowOverrideのみ機能し<Directory><Location ...>セクション内に配置されても無視されることに注意してください。httpd.apache.org
Daniel Sokolowski

2
また、<Directory>ディレクティブは相対パスではなく絶対パスを想定していることにも注意してください。私の場合、働いている間に<Directory /> 失敗<Directory /var/www/html/subdir>ました。
Lukas Knuth

115
  1. Apache mod_rewriteモジュールを有効にする

    a2enmod rewrite

  2. 次のコードを追加します /etc/apache2/sites-available/default

    AllowOverride All

  3. Apacheを再起動します

    /etc/init.d/apache2 restart


7
Apache 2.4では、/ etc / apache2 / sites-availableの下の構成ファイルは、現在.confで終わっている必要があることに注意してください。そして、私は自分のサーバーでdefault.confを/ etc / apache2 / sites-availableと/ etc / apache2 /に1つ
混在させました

2
おかげで、私の場合には、書き換えはapache2のではデフォルトで有効化されなかった
クロス

私はすでにこの手順に従っていますが、Apache 2.4で機能していません。私が間違っていること= [
Luciano Andress Martini '27

require ip overrides require authentication、この動作は予期しないものであり(apache 2.2の特定のipはこれを行わないでください)、IP例外が認証を生成しているため、私の意見では非常に危険である可能性があります。 !
Luciano Andress Martini

最初のステップを省略しましたが、apache.conf(Debian 8、/ etc / apache2 / apache.conf)でAllowOverrideをAllに変更しました。再起動すると、ファイルにアクセスできなくなります。しかし、エラーは許可が拒否されたようなものではなく、500内部サーバーエラーです。なぜですか?修正できますか?
dasLort

44

上記のすべてを試してみましたが、これらはすべて有効で適切な回答であり、htaccessファイルが機能していないか、読み取られていない場合は、apache2.confファイル内のディレクティブを変更してください。Ubuntuでのパスは/etc/apache2/apache2.conf

<Directory>htaccessファイルが存在する公開Webページを指すディレクティブを変更します。からAllowOverride Noneに変更AllowOverride All

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

同じ問題があり、Ubuntu Ask!で答えと説明を見つけました。フォーラム/ubuntu/421233/enabling-htaccess-file-to-rewrite-path-not-working


2
または、VHostに追加することもできます
ssi-anik

実際にAllowOverride FileInfoは、.htaccessファイルを読み込んで使用するには、3行目でのみ必要です。(Allなどの代わりにを.httpasswd使用して個別に有効にすることができます)などの追加の構成オーバーライドも有効にします。AuthconfigAll
ラファル

20

以下のためのUbuntu、
まず、次のコマンドを実行します-

sudo a2enmod rewrite

次に、/etc/apache2/sites-available/000-default.confこのコマンドを使用して、nanoまたはvimを使用してファイルを編集します。

sudo nano /etc/apache2/sites-available/000-default.conf

次に、000-default.confファイルで、行の後にこれを追加しますDocumentRoot /var/www/html。ルートhtmlディレクトリが別のディレクトリである場合は、次のように記述します。

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

すべてを実行した後、次のコマンドを使用してApacheを再起動します sudo service apache2 restart


6

ただ3つのステップに従ってください

  1. 次のコマンドを使用してmode_rewriteを有効にします

    sudo a2enmod rewrite

パスワードを尋ねられます。パスワードを入力してください

  1. / etc / apache2 / sites-available /ディレクトリにある000-default.confまたはdefault.confファイルを更新します。直接編集することはできません。次のコマンドを使用して開きます

    sudo gedit /etc/apache2/sites-available/000-default.conf

またはsudo gedit /etc/apache2/sites-available/default.conf

あなたは得るでしょう

DocumentRoot / var / www / html

または

DocumentRoot / var / www

ライン。その後に次のコードを追加します。

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

ユーザーにディレクトリタグパスをファイルに示されているものと同じにしてください。

  1. 次のコマンドを使用してApacheサーバーを再起動します

    sudoサービスapache2再起動


ありがとう。ブラジルからのご挨拶。
Fox.11

5

おそらく、AllowOverrideはNoneに設定されています。/ etc / apache2フォルダーにあるapache2.confのDirectoryセクション

AllowOverride Allに設定してみてください


5

私の経験では、/ var / www /ディレクトリディレクティブはサブフォルダーvirtualhostディレクティブを防ぎます。したがって、すべての提案を試してもまだ機能せず、virtualhostsを使用している場合は、これを試してください。

1-にAllowOverride Allディレクティブが あることを確認してください /etc/apache2/sites-available/example.com.conf

2-/ var / www /のディレクトリディレクティブをチェックします/etc/apache2/apache2.conf(おそらく164行目)。

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

AllowOverride Noneディレクティブがある場合は、変更するAllowOverride All か、行をエスケープする だけです


3

デフォルトでは、Apacheは.htaccessファイルを使用して書き換えルールを適用することを禁止しているため、

手順1 — mod_rewriteを有効にする(有効になっていない場合) 最初に、mod_rewriteをアクティブにする必要があります。利用可能ですが、Apache 2のクリーンインストールでは有効になっていません。

$ sudo a2enmod rewrite

これにより、モジュールがアクティブ化されるか、モジュールがすでに有効になっていることが通知されます。これらの変更を有効にするには、Apacheを再起動します。

$ sudo systemctl restart apache2

mod_rewriteが完全に有効になりました。次のステップでは、リダイレクトの書き換えルールを定義するために使用する.htaccessファイルを設定します。

手順2 — .htaccessの設定 nanoまたはお気に入りのテキストエディターを使用して、デフォルトのApache構成ファイルを開きます。

$ sudo nano /etc/apache2/sites-available/000-default.conf

そのファイル内で、最初の行から始まるブロックを見つけます。そのブロックの中に、次の新しいブロックを追加して、構成ファイルが次のようになるようにします。すべてのブロックが適切にインデントされていることを確認してください。

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . . 
</VirtualHost>

ファイルを保存して閉じます。これらの変更を有効にするには、Apacheを再起動します。

$ sudo systemctl restart apache2

できました。.htacessが機能するはずです。 このリンクは実際に誰かを助けるかもしれません https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04


私のために機能した再起動コマンドは$ sudo httpd -k restart(Red Hat 4.4.7-23)
Himalaya Garg


1

WampServerオープンWampServerトレイアイコン---->アパッチ---> Apacheのモジュール---> rewrite_module



0

完全を期すために、「AllowOverride All」で問題が解決しない場合は、次を使用してこの問題をデバッグできます。

  1. 実行してapachectl -S、namevhostが複数あるかどうかを確認します。httpdが別のDocumentRootの.htaccessを探している可能性があります。

  2. strace -f apachectl -X.htaccessの読み込み元(または読み込み元ではない場所)を使用して探します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.