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


474

VistaマシンにApache 2.2を新しくインストールしました。modrewriteを除いて、すべて正常に動作します。

コメントを外しました

LoadModule rewrite_module modules/mod_rewrite.s

しかし、私の書き換えルールはどれも機能しません。

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

私が使用しているすべてのルールは私のホスティングで機能しているので、大丈夫なはずです。ですから、私の質問は、Apacheの設定に隠されたものがあるかどうかです。


1
実際の問題は、$ {DOCUMENT_ROOT}はホスティングにOKだったルートディレクトリに私を指摘しているため、私は、間違ったパスを持っていたことでしたが、地元の間違った私はすでに持っていた問題の波平だけRewriteEngineで..そう
ヤクブ・アーノルド

これに対する承認済みの回答を変更していただけますか?現在受け入れられている回答の作成者は、それが十分ではないことを認めています。
シャドウウィザードはあなたのための耳です

1
Ubuntu 12.04 LTSでmod_rewriteを有効にする方法(Debianでも動作するはずです。これは、インストールとアクティベーションを示していますが、以下のチュートリアルでは意外にもできません:(
Sliq

3
AllowOverride FileInfoこのページのすべての回答が示唆するように、すべてを許可するのではなく、.htaccesファイルのmod_rewriteディレクティブを有効にしたいすべての人に強くお勧めします。これらのすべての答えを見て悲しいのは、提案された「解決策」の結果を理解しようとするのではなく、「それは機能するだけで大​​丈夫」というアプローチを取ることです。サーバーで何をしているのか、また、付与した特権を制限する方法を理解するようにしてくださいAllowOverride AllRTFM!、それは主題について全く明らかです。
RemyNL、2016

1
@Blackこれは、httpd.confという名前のApache構成ファイルにあります。私のPCでは、C:\ xampp \ apache \ confディレクトリにあります。XAMPPでApacheをインストールしたためです。
Lex Soft

回答:


1005

使用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)は、ファイルが存在しない限り、すべてのトラフィックをのindex.phpファイルにリダイレクトDocumentRootします。

したがって、次のディレクトリ構造があり、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はアクセスできません。


15
ここでのアイデアはUNIX CLIに適していますが、コマンドはDebianベースのLinuxディストリビューションでのみ機能し、OPのWindows環境では機能しません。
Jason Rikard

17
a2enmod rewriteが仕事をした
Dr Casper Black

98
さらに注:ファイルをまったく読み取るAllowOverride Allために、サイトの構成も確認する必要があります.htaccess
アダムローゼンフィールド

2
@Dennis a2dismod rewriteを使用できます
Jonathan Mayhak、2014年

3
a2enmod rewriteウィンドウでどのように使用できますか?
ナマン

229

私の状況では、

RewriteEngine On

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

私の問題の解決策は、仮想ホストのエントリを編集して含めることでした

AllowOverride all

<Directory>問題のサイトのセクション。


10
実際、a2enmod rewrite&が含まRewriteEngine Onれていても-VirtualHostファイル内に.htaccess存在AllowOverride allすると、機能しなくなります-これが私をAllowOverride all魅了し、魅力のように機能するように変更しました:)
HeavenCore

9
初心者ここ.. VirtualHostファイルはどこですか?
davneet

3
これが方法です...これ以外はすべて設定しました。
arrayown

2
AllowOverrideディレクティブは、「で許可されているディレクティブの種類を決定する.htaccessファイルを」。さらに、「このディレクティブがに設定されているNone場合、.htaccessファイルは完全に無視されます。この場合、サーバーは.htaccessファイルシステム内のファイルの読み取りを試みません。」公式ドキュメント:httpd.apache.org/docs/2.2/mod/core.html#allowoverride
John Erck

これで解決しました-WordPressのかなりのパーマリンクが正しく機能しないという問題がありました。その場合a2enmod rewrite、VirtualHostsファイルで「AllowOverride None」を「AllowOverride All」に変更すると機能するはずです。VirtualHostsファイルは、同じサーバー(およびIPアドレス)に対して複数のドメイン名を実行している場合に適用されます。ドメインをセットアップするためにそれをセットアップしたでしょう。
Jason Preston

83

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


2番目によくある問題は、mod rewriteを有効にしていないことa2enmod rewriteです。その後、Apacheを再起動します。


これは、デフォルトのubuntuインストールで発生している問題を解決するため、一番の答えになるはずです!
Sliq 2013

1
これにより、.htaccessは他のすべてのApache構成をオーバーライドできます。これは推奨されません。
Bhargav Nanekalva 2014年

はい:)これも私の問題でしたが、ここでは、この "AllowOverride All"が/etc/apache2/sites-available/[sitename].confと[sitename-ssl]にあるという新人の説明をしています。 .conf。ちなみに私はあなたのために2回目の調査をしなければなりませんでした:D、ちなみに!
MetaTron

77

上記以外の場合は、/ 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

これは私のために働いた


エラーを/laravel/public/authors was not found on this serverに変更しました/index.php was not found on this server
Gangaraju 2013年

<Directory>を見つけることができません、<VirtualHost *:80>のみ
Nicolas S.Xu 2017

1
@ NicolasS.Xuはこれを<VirtualHost *:80>タグに配置します
wimdetr 2017

私は同じことをしましたが、<Directory /var/www/html>このフォルダからルールを適用するためだけに新しいセクションを追加しました。
Louis Loudog Trottier、2018


28

問題の根源がわかっている場合、この問題を解決する方法はたくさんあります。

問題1

まず、あなたのapacheがmod_rewrite.cモジュールをインストールまたは有効化していないことが問題である可能性があります。

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

  1. コンソールを開いて、次のように入力します。

    sudo a2enmod rewrite

  2. Apacheサーバーを再起動します。

    service apache2 restart

問題2

  1. 上記に加えて、機能しない場合は、オーバーライドルールをapache confファイル(apache2.conf、http.conf、または000-defaultファイル)から変更する必要があります。

  2. 「ディレクトリ/ var / www /」を見つけます

  3. 「上書きなし」を「すべて上書き」に変更します

問題3

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

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

    sudo a2enmod userdir

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

これについてさらに読むには、次のサイトにアクセスしてください。http//seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html


2
問題の大きな内訳。
Banago 2014

AllowOverride Allあまりにも多くの危険な機能(perlスクリプトの使用など)を有効にするため、使用しないでください。代わりに使用してくださいAllowOveride Options
Marki555

28

新しい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

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


これが最新の答えです。
18

1
2019年以降の場合は、この回答に賛成投票してください:)
Luiz Cavalcanti

27

オープンターミナルとtypin a2enmod rewrite、それはあなたを可能にしますmod_rewrite、Apacheのモジュールを。

次に行きます /etc/apache2/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>

今すぐあなたのApacheを再起動してください /etc/init.d/apache2 restartまたはでservice apache2 restart

クリーンなURLテストをもう一度行ってください。今回は合格します。


15

<編集>

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ファイルのどこかに。


@gabehabeあなたのアバターはアイコンが私のドキュメントを持っているように見えました、笑
ジョナサン・ドス・サントス

5

私はこれをやった

sudo a2enmod rewrite

その後、次のコマンドでApacheサービスを再起動する必要があります

sudo service apache2 restart

4

古いスレッド。単に、AllowOverrideをallに設定せずに、使用したい特定のmodを使用することを望んでいます。

AllowOverride mod_rewrite mod_mime

そしてこの行はコメントを外すべきです

LoadModule rewrite_module modules/mod_rewrite.so

屈折


4

以下のコマンドを使用

sudo a2enmod rewrite

そして、以下のコマンドを介してApacheを再起動します

sudo service apache2 restart


3

私は私のトラフィックを無視してのmod_rewriteルールに苦労初めて、私は私が間違ってそれらを置いていたこと(イライラ)を学んだ<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


2

私のために何が働いたのですか(ubuntuで):

sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load

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

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