web-dev-qa-db-ja.com

Apache 2.2でmod_rewriteを有効にする方法

私のVistaマシンにApache 2.2をフレッシュインストールしたところ、mod書き換え以外はすべてうまくいきました。

コメントしていません

LoadModule rewrite_module modules/mod_rewrite.s

しかし、私の書き換え規則はどれもうまくいきません。

RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404

私が使用しているルールはすべて私のホスティングに取り組んでいるので、それらは問題ないはずです。それで私の質問は、Apacheの設定に隠されたことがありますか?

450
Jakub Arnold

mod_rewriteを使用するには、端末に次のコマンドを入力します。

Sudo a2enmod rewrite

その後Apache2を再起動します

Sudo /etc/init.d/Apache2 restart

または

Sudo service Apache2 restart

または新しい統一システム制御方式による

Sudo systemctl restart Apache2

その後、ご希望の場合は、次の.htaccessファイルを使用できます。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

上記の.htaccessファイル(DocumentRootに配置されている場合)は、ファイルが存在しない限り、すべてのトラフィックをDocumentRoot内のindex.phpファイルにリダイレクトします。

それで、あなたが以下のディレクトリ構造を持っていて、httpdocsがDocumentRootだとしましょう。

httpdocs/
    .htaccess
    index.php
    images/
        hello.png
    js/
        jquery.js
    css/
        style.css
includes/
    app/
        app.php

Httpdocsに存在するファイルはすべて、上記の.htaccessを使用して要求者に提供されますが、それ以外のものはすべてhttpdocs/index.phpにリダイレクトされます。 includes/app内のアプリケーションファイルはアクセスできません。

959
Jonathan Mayhak

私の状況では、私は

RewriteEngine On

私の.htaccessに、ロードされているモジュールと一緒に、それは働いていませんでした。

私の問題の解決策はinlcudeに私のvhostエントリを編集することでした

AllowOverride all

問題のサイトの<Directory>セクションにあります。

221
Mike Wazowski

AllowOverride Allを設定してみてください。


2番目に一般的な問題はmodの書き換えを有効にしていないことです:a2enmod rewriteそしてそれからApacheを再起動します。

79
Jarrod

上記の方法でうまくいかない場合は、/ etc/Apache2/sites-enabled/000-defaultを編集してみてください。

ほとんど一番上にあなたが見つけるでしょう

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

AllowOverride NoneAllowOverride Allに変更

これは私のために働いた

73
Martin Sax

Ubuntuでは:

実行します。

a2enmod rewrite

その後:

service Apache2 restart

mod_rewriteが有効になります。

43
nickleefly

問題の根本を知っていれば、この問題を解決する方法はいくつかあります。

問題1

まず、あなたのApacheがmod_rewrite.cモジュールをインストールしていないか有効にしていないことが問題かもしれません。

このため、次のように有効にする必要があります。

  1. あなたのコンソールを開いて、それに入力してください。

    Sudo a2enmod rewrite

  2. Apacheサーバーを再起動してください。

    service Apache2 restart

問題2

  1. 上記に加えて、上手く行かない場合は、Apache confファイル(Apache2.conf、http.conf、000デフォルトファイルのいずれか)から上書きルールを変更しなければならないかもしれません。

  2. "Directory/var/www /"を見つけます。

  3. [上書きしない]を[すべて上書き]に変更します。

問題3

書き換えモジュールが見つからないというエラーが表示された場合は、おそらくuserdirモジュールが有効になっていません。このため、有効にする必要があります。

  1. これをコンソールに入力します。

    Sudo a2enmod userdir

  2. それでもまだ有効になっていない場合は、(上記のように)書き換えモジュールを有効にします。

これについてさらに読むために、あなたはこのサイトを訪問することができます: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html

28
Kripa Jayakumar

端末を開いてa2enmod rewriteを入力すると、Apache用のmod_rewriteモジュールが有効になります。

それから/etc/Apache2/sites-availableに行き、デフォルトファイルを編集してください。 (このためには、このファイルとsites-availableフォルダへの書き込み権限が必要です。)

下の行を既存の行4から14に置き換えます。

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

/etc/init.d/Apache2 restartまたはservice Apache2 restartでApacheを再起動してください。

もう一度きれいなURLテストをしてください、そして今度はそれは合格するでしょう。

26
Umesh Patil

新しいApacheバージョンは何らかの形で変更されました。 Apacheのバージョンが2.4の場合は/etc/Apache2/に移動する必要があります。 Apache2.confという名前のファイルがあります。あなたはそれを編集しなければなりません(あなたはroot権限を持っているべきです)。このようにディレクトリのテキストを変更する

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

それではApacheを再起動してください。

service Apache2 reload

うまくいくことを願っています。

22
Ijas Ahamed N

<edit>

あなたがmod_rewrite.soの代わりにmod_rewrite.sを言ったことに気づいた - それがあなたの質問のタイプミスであり、httpd.confファイルの中ではないことを願っています! :)

</edit>

私はLinux上でApacheを使用することに慣れていますが、私は先日これをしなければなりませんでした。

まずはじめに、Apacheのインストールディレクトリを見てください。 (私はあなたがここでそれを "C:\ Program Files"にインストールしたと仮定します)

「C:¥Program Files¥Apache Software Foundation¥Apache2.2¥modules」フォルダーを見て、そこにmod_rewrite.soというファイルがあることを確認してください。 (それがあるはずです、それはデフォルトのインストールの一部として提供されています。

次に、 "C:¥Program Files¥Apache Software Foundation¥Apache2.2¥conf"を開き、httpd.confを開きます。次の行を確認してください。

#LoadModule rewrite_module modules/mod_rewrite.so

コメントがない:

LoadModule rewrite_module modules/mod_rewrite.so

また、デフォルトでRewriteEngineを有効にしたい場合は、次のように追加します。

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

httpd.confファイルの末尾に移動します。

そうでない場合は、必ず指定してください。

RewriteEngine On

あなたの.htaccessファイルのどこかに。

15
Danny Battison

私はちょうどこれをしました

Sudo a2enmod rewrite

それから、次のコマンドでApacheサービスを再起動しなければなりません。

Sudo service Apache2 restart
5
user3470929

古いスレッドでは、AllowOverrideをallに設定せずに代わりに使用したい特定のmodを使用します。

AllowOverride mod_rewrite mod_mime

そしてこの行はコメントアウトしないでください

LoadModule rewrite_module modules/mod_rewrite.so

参考文献

3
Abhishek Gurjar

下記のコマンドを使用

Sudo a2enmod rewrite

そして、以下のコマンドでApacheを再起動してください。

Sudo service Apache2 restart
3
prasoon

それを行うには明らかに複数の方法がありますが、もっと標準的な方法を使用することをお勧めします。

ErrorDocument 404 /index.php?page=404
3
Michael Cramer

私のトラフィックを無視するmod_rewriteのルールに初めて苦しんだとき、私は自分のトラフィックがallを無視することを意味する間違った<VirtualHost>にそれらを配置したことを知りました。彼らがどれほどよく書かれていようとも、彼らは関係ありません。これがあなたに起こっていないことを確認してください:

# Change the log location to suit your system. RewriteLog /var/log/Apache-rw.log RewriteLogLevel 2

これらのパラメータは、Apacheのグレースフルリスタートを実行すると有効になるので、それらをリサイクルしてmod_rewriteの動作を綿密に監視できます。問題が解決したら、RewriteLogLevelを元に戻して祝います。

私の経験の100%で、RewriteLogが私の書き換え規則の問題を発見するのに役立っていることがわかりました。これはあまりお勧めできません。トラブルシューティングに頑張ってください。

また、このブックマークはあなたの親友です: http://httpd.Apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog

3
Garrett Ellis

私にとってうまくいったこと(ubuntu):

Sudo su
cd /etc/Apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load

また、すでに述べたように、AllowOverride allの関連セクションに/etc/Apache2/sites-available/defaultが設定されていることを確認してください。

2
Benubird