私のVistaマシンにApache 2.2をフレッシュインストールしたところ、mod書き換え以外はすべてうまくいきました。
コメントしていません
LoadModule rewrite_module modules/mod_rewrite.s
しかし、私の書き換え規則はどれもうまくいきません。
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
私が使用しているルールはすべて私のホスティングに取り組んでいるので、それらは問題ないはずです。それで私の質問は、Apacheの設定に隠されたことがありますか?
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
内のアプリケーションファイルはアクセスできません。
私の状況では、私は
RewriteEngine On
私の.htaccess
に、ロードされているモジュールと一緒に、それは働いていませんでした。
私の問題の解決策はinlcudeに私のvhostエントリを編集することでした
AllowOverride all
問題のサイトの<Directory>
セクションにあります。
AllowOverride All
を設定してみてください。
2番目に一般的な問題はmodの書き換えを有効にしていないことです:a2enmod rewrite
そしてそれからApacheを再起動します。
上記の方法でうまくいかない場合は、/ etc/Apache2/sites-enabled/000-defaultを編集してみてください。
ほとんど一番上にあなたが見つけるでしょう
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
AllowOverride None
をAllowOverride All
に変更
これは私のために働いた
Ubuntuでは:
実行します。
a2enmod rewrite
その後:
service Apache2 restart
mod_rewrite
が有効になります。
問題の根本を知っていれば、この問題を解決する方法はいくつかあります。
問題1
まず、あなたのApacheがmod_rewrite.cモジュールをインストールしていないか有効にしていないことが問題かもしれません。
このため、次のように有効にする必要があります。
あなたのコンソールを開いて、それに入力してください。
Sudo a2enmod rewrite
Apacheサーバーを再起動してください。
service Apache2 restart
問題2
上記に加えて、上手く行かない場合は、Apache confファイル(Apache2.conf、http.conf、000デフォルトファイルのいずれか)から上書きルールを変更しなければならないかもしれません。
"Directory/var/www /"を見つけます。
[上書きしない]を[すべて上書き]に変更します。
問題3
書き換えモジュールが見つからないというエラーが表示された場合は、おそらくuserdirモジュールが有効になっていません。このため、有効にする必要があります。
これをコンソールに入力します。
Sudo a2enmod userdir
それでもまだ有効になっていない場合は、(上記のように)書き換えモジュールを有効にします。
これについてさらに読むために、あなたはこのサイトを訪問することができます: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
端末を開いて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テストをしてください、そして今度はそれは合格するでしょう。
新しい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
うまくいくことを願っています。
<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ファイルのどこかに。
私はちょうどこれをしました
Sudo a2enmod rewrite
それから、次のコマンドでApacheサービスを再起動しなければなりません。
Sudo service Apache2 restart
古いスレッドでは、AllowOverrideをallに設定せずに代わりに使用したい特定のmodを使用します。
AllowOverride mod_rewrite mod_mime
そしてこの行はコメントアウトしないでください
LoadModule rewrite_module modules/mod_rewrite.so
参考文献
下記のコマンドを使用
Sudo a2enmod rewrite
そして、以下のコマンドでApacheを再起動してください。
Sudo service Apache2 restart
それを行うには明らかに複数の方法がありますが、もっと標準的な方法を使用することをお勧めします。
ErrorDocument 404 /index.php?page=404
私のトラフィックを無視する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
私にとってうまくいったこと(ubuntu):
Sudo su
cd /etc/Apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load
また、すでに述べたように、AllowOverride all
の関連セクションに/etc/Apache2/sites-available/default
が設定されていることを確認してください。