![mod_rewrite Apache モジュールをロードできません](https://rvso.com/image/697384/mod_rewrite%20Apache%20%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%92%E3%83%AD%E3%83%BC%E3%83%89%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93.png)
mod_rewrite
のモジュールを使用しようとしていますApache24 server
が、ロードできません。このトピックに関して多くの質問があることは承知しており、それらすべてを確認しましたが、何も機能していないようです。これまで私が実行した手順は次のとおりです---
変更された
httpd.conf
ファイルは次の変更を行いました:
a. コメントを解除LoadModule rewrite_module modules/mod_rewrite.so
b.AllowOverride None
に変更AllowOverride All
Apacheサーバーを再起動しました
コマンド プロンプト コマンドを使用して、ロードされたモジュールを確認しました
httpd -M
。mod_rewrite モジュールがロードされていることがわかります。以下の画像を添付します。
しかし、これらすべての手順を実行した後、mod_rewrite がロードされたモジュールとして表示されませんphpinfo
。
上の画像からわかるように、mod_rewrite がロードされたモジュールはありません。また、ワイルド ハックとして、ファイルを使用して URL を書き換えることも試みましたが、これは機能しません。ルート ディレクトリ内にそのファイルを配置しましたが、.htaccess
Apache はファイルを無視しているようです。.htaccess
Note: I am running `PHP` as an apache module
Using `WAMP` stack
Using `localhost` as server
URL 書き換えのためにこのモジュールがどうしても必要です。このモジュールをロードする別の方法を提案してもらえますか?
編集
.htaccess
回答によると、モジュールがロードされており、どちらにも依存していないため、仮想ホストから URL を書き換えようとしました。しかしinfo.php
、それでもリダイレクトされません。以下の設定を追加していますVirtual host
---
<VirtualHost *:80>
<Directory "/Apache24/htdocs">
Options FollowSymLinks
AllowOverride All
DirectoryIndex index.html index.php
</Directory>
ServerName localhost
DocumentRoot "/Apache24/htdocs"
ErrorLog "/Apache24/logs/error.log"
CustomLog "/Apache24/logs/access.log" combined
<directory "/Apache24/htdocs">
<IfModule rewrite_module>
Options +FollowSymlinks
RewriteEngine On
</IfModule>
<IfModule rewrite_module>
RewriteRule ^working.php fun.html
</IfModule>
</directory>
# Rewrite Rules #####################
RewriteEngine On
RewriteRule ^working.php fun.html
# end Rewrite Rules #################
</VirtualHost>
上記のコードは、working.php
を実行しようとしてもにリダイレクトしませんfun.html
。単に次のように表示されます。
要求された URL /working.php はこのサーバー上に見つかりませんでした。
答え1
- mod_rewrite が機能するために .htaccess や AllowOverride は必要ありません。サーバーの管理者である以上、これらを使用しないでください。これらを使用すると、作業が複雑になり、サーバーに不要なオーバーヘッドが発生するだけです。
モジュールをロードする以外に必要なディレクティブは次の通りです:
RewriteEngineオン
余分な:
- 単純なリダイレクトだけが必要な場合は、代わりに Redirect/RedirectMatch (mod_alias から) を検討してください。
- 近い将来に悪夢や損失が発生しないように、リダイレクト/書き換えを仮想ホスト コンテキストで定義することを検討してください。
答え2
リンクされたスクリーンショットから、サーバー ルート (ファイルシステム パス) は のように見えますC:/Apache24
が、サーバー設定ディレクティブのいずれにも への参照がありませんC:
。完全なファイルシステム パスを参照する必要があります。例:
<Directory "C:/Apache24/htdocs">
RewriteRule ^working.php fun.html
このディレクティブは、VirtualHost(コンテナ外<Directory>
)で直接使用されるため、一致しません。VirtualHost(またはサーバー設定)コンテキストで使用される場合、mod_rewriteは完全なURLパスと一致します。含まれるものスラッシュ プレフィックス。これは、mod_rewrite をディレクトリ/.htaccess
コンテキストで使用する場合 (スラッシュ プレフィックスが除外される場合) との重要な違いです。