153

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

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

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

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

どうすればこれを修正できますか...何か間違ったことをしましたか?

4

14 に答える 14

315

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

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

第三に、.htaccessファイルが実際に読み取られていることを確認したい場合は、その中にガベージを入れてください。.htaccessファイルの「INVALIDLINEHERE」などの無効な行は、そのファイルを含むディレクトリにブラウザを向けると、500サーバーエラーになります。そうでない場合は、AllowOverrideが正しく構成されていません。

于 2012-08-30T19:01:10.823 に答える
130
  1. Apachemod_rewriteモジュールを有効にする

    a2enmod rewrite

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

    AllowOverride All

  3. apacheを再起動します

    /etc/init.d/apache2 restart

于 2013-10-16T06:27:50.077 に答える
54

上記のすべてを試したが、それらはすべて有効で適切な答えであり、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!で答えと説明を見つけました。フォーラムhttps://askubuntu.com/questions/421233/enabling-htaccess-file-to-rewrite-path-not-working

于 2015-09-18T15:30:31.170 に答える
23

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

于 2016-04-20T11:15:21.510 に答える
6

ほとんどの場合、AllowOverrideはNoneに設定されています。/ etc/apache2フォルダにあるapache2.confのディレクトリセクション

AllowOverrideAllに設定してみてください

于 2016-10-03T05:57:43.453 に答える
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

またはsudogedit/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 service apache2 restart

于 2017-07-02T07:34:44.630 に答える
6

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

AllowOverride All1-にディレクティブが あることを確認してください /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 か、単にエスケープラインにします

于 2018-03-05T13:27:35.910 に答える
5

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

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

$ 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

于 2018-08-04T19:29:41.827 に答える
3

/etc/apache2/apache2.confに移動します

そのファイルを編集する必要があります(root権限が必要です)。ディレクトリテキストを次のように変更します。

<Directory / var /www/>
オプションインデックスFollowSymLinksAllowOverrideAll
すべて
が許可されている必要があります

ここで、apacheを再起動する必要があります。

service apache2 restart

于 2020-10-10T21:38:46.287 に答える
2

この使用をクリアしました。このサイトを使用して、ここをクリックし、手順に従ってください。ubuntuバージョン18.04まで同じ手順に従います。

于 2019-07-16T06:30:49.247 に答える
1

WampServerWampServerトレイアイコンを開く---->Apache---> Apache Modules ---> rewrite_module

于 2015-05-27T11:14:08.243 に答える
0

.htaccessでRewriteBase/{yourfolder}/を使用します

于 2015-11-19T15:27:43.170 に答える
0

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

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

  2. strace -f apachectl -X.htaccessをロードしている(またはロードしていない)場所を使用して探します。

于 2020-01-12T13:13:55.117 に答える
0

仮想マシンに多くのサイトがあり、.htaccessが必要なサイトの構成を変更するだけで解決しました

私がしたこと:

  1. sudo a2enmod rewrite

次に、すべてのサイト「example.com」ではなく、特定のサイトの構成のみを変更しました

  1. sudo nano /etc/apache2/sites-enable/example.com.conf

その中に私は追加しました

<Directory /var/www/example.com>
    AllowOverride All
</Directory>
  1. service apache2 restart

サーバー全体に変更を適用しようとするとクラッシュしたため、1つのサイトにのみ適用されます。理由はわかりませんが、これで問題は解決しました。

于 2022-03-04T12:44:37.453 に答える