サーバーでmod_rewriteが有効になっているかどうかを確認する方法


104

現在、私はホスティングをlightspeedサーバーで使用してます。ホスティングmod_rewriteは有効になっていると言いますが、そこでスクリプトを機能させることができません。URLにアクセスしようとすると、404-not foundページが返さます。

Apacheで実行されている別のサーバーに同じコードを配置しました。あそこで働いています。私が推測するので、それはだ.htaccessmod_rewrite問題が。

しかし、ホスティングサポートはまだmod_rewriteがオンになっていると主張しているので、実際に有効になっているかどうかを確認する方法を教えてください。

で確認を試みましたphpinfo()が、うまくいきません。見つかりません。mod_rewrite使用しているためlightspeedでしょうか。

確認する方法はありますか?私を助けてください。ありがとうございました。

参考までに:私の.htaccessコードは

Options -Indexes

<IfModule mod_rewrite.c>
DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</IfModule>

私もこうやってみました

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

しかし同じ結果。

回答:



96
  1. mod_rewriteモジュールが有効になっているかどうかを確認するには、WAMPサーバーのルートフォルダーに新しいphpファイルを作成します。次のように入力します

    phpinfo();

  2. 作成したファイルにブラウザーからアクセスします。

  3. CtrlF検索を開きます。「mod_rewrite」を検索します。有効になっている場合、「ロードされたモジュール」として表示されます

  4. そうでない場合は、httpd.conf(Apache Configファイル)を開き、次の行を探します。

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. 先頭のポンド( '#')記号を削除して、このファイルを保存します。

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

  7. ブラウザで同じphpファイルにアクセスします。

  8. もう一度「mod_rewrite」を検索してください。あなたは今それを見つけることができるはずです。


9
PHP自体がApacheモジュールとして実行されている場合、phpinfo()がApacheロードモジュールを報告すると思います。OPは、PHPが独自のmod_rewrite互換の書き換えエンジンを持つLightspeedで実行されていると述べています。
MrWhite

2
最初のステップでは、次のように入力する必要がありました。<?php echo phpinfo(); ?>
Greg Noe

6
PHPをCGIアプリケーションとして実行している場合、このメソッドは機能しないことに注意してください(phpinfo()「サーバーAPI」フィールドに「CGI / FastCGI」と表示されている場合)。phpinfo()有効なモジュールはリストされません。その場合は、How to check for mod_rewrite on PHP CGIを参照してください
Rory O'Kane

67

仮想ホスト構成ファイルを使用している場合は、問題の仮想ホストに次のAllowOverride Allようなディレクティブがあることを確認してください。

<VirtualHost *:80>
        ...
    <Directory "directory/of/your/.htaccess">
        AllowOverride All
    </Directory>
</VirtualHost>

基本的に、これはすべての.htaccessディレクティブの処理を許可することを示しています。


3
ありがとう。バドワイザーのおかげです。<3
Nishant Ghodke

それは何を意味するの...では<Directory ...>?そこに何を入れましょうか。.htaccessがあるディレクトリ?
ジョアンピメンテルフェレイラ

はい、確かに、...は、引用符で囲まれた "..."に言及する必要があります。
ジョアン・ピメンテル・フェレイラ

ありました。サーバーからconfファイルをコピーし、をServerName変更している間、ディレクトリ名は変更していませんでした。その後、Apacheを再起動しても問題ありませんでした。
D.ダン

1
リチャードこの答えがあなたのために働いてあなたの問題を解決したなら、あなたはそれを正しいものとしてマークし、@ Jahmic彼の期限を与えるべきです。
シンシアV

18

apache_get_modules()が認識されないか、phpinfo()にこのモジュールに関する情報がない場合。.htaccessファイルに次の行を追加して、modの書き換えをテストしてみてください。

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

そしてmod_rewrite.php:

<?php echo "Mod_rewrite is activated!"; ?>

15

コンソール:

<VirtualHost *:80>
        ...
    <Directory ...>
        AllowOverride All
    </Directory>
</VirtualHost>

sudo a2enmod rewrite
sudo service apache2 restart

私はこれを解決するために多くのことを試みましたが、これを試すとうまくいきます。私は今、最後のapacheとubuntuを持っています。
Fernando Sanchiz

15

もし

in_array('mod_rewrite', apache_get_modules())

戻るとtrue、mod-rewriteが有効になります。


PHPコードを介して有効または無効になっている書き換えモジュールをチェックするための完璧な1行のソリューション。
Shakeel Ahmed 2017

12

PHPの定義済みapache_get_modules()関数は、有効なモジュールのリストを返します。mod_rewriteが有効になっているかどうかを確認するには、サーバーで次のスクリプトを実行します。

<?php
print_r(apache_get_modules());
?>

上記の例が失敗した場合は、次を使用してmod-rewriteを確認できます。 .htaccessファイルできます。

htaccessドキュメントルートにファイルを作成し、次のrewriteRuleを追加します。

RewriteEngine on

RewriteRule ^helloWorld/?$ /index.php [NC,L]

ここでhttp://example.com/HelloWorldにアクセスすると、内部的に/index.phpに転送されます、サイトのページにます。それ以外の場合、mod-rewriteが無効になっていると、500 Internelサーバーエラーが発生します。

お役に立てれば。


私は7.2を使用していますが、apache_get_modulesは未定義です。編集後にapache2を再起動する必要があり.htaccessますか?
Adi Prasetyo 2018年

1
いいえ、htaccessを使用するときにサーバーを再起動する必要はありません。
Amit Verma


11

これはCentOSで動作します:

$ sudo httpd -M |grep rewrite_module

出力する必要があります rewrite_module (shared)


これは、sshアクセス権があることを前提として、CentOSでこれを行う最良の方法です。ありがとう、@ radtek!
John T.

10

このコードが.htaccessファイルにある場合(mod_rewrite.cのチェックなし)

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

500サーバーエラーが発生したサイトの任意のページにアクセスできます。modrewriteがオンになっていると言っても安全だと思います。


3
では、500エラーなしでサイトの一部のページにアクセスできますか?これは通常、.htaccessファイルが読み取られている場合、mod_rewriteをオンにする必要があることを意味します。ただし、.htaccessが読み取られていない可能性があります... .htaccessファイルの先頭にいくつかの意味のない文字を書き込んでみてください。これにより、Apacheが実際にファイルを読み取っている場合、接続が500サーバーエラーで終了します。読み込まれている場合、機能すると思われるが機能しないURLの例を挙げていただけますか?
Clive

問題は、Apacheサーバーではなく、光速です。500エラーは表示されず、404エラーのみが表示されます。.htaccessが有効になっていないのはこのためです。
ナイトライダー2011

おそらくそうです、私は.htaccessに意味のない文字を入れてみて、書き換えられていないページ(index.phpなど)に直接アクセスしたときに500エラーが発生するかどうかを確認します。そうでない場合は、Lightspeedで.htaccessを有効にする方法を尋ねる新しい質問を投稿する価値があるかもしれません
Clive

5

あなたはphp関数を使うことができます

      apache_get_modules

そしてmod_rewriteをチェックします

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

http://in2.php.net/apache_get_modules


2
apache_get_modules()は、PHPがApacheモジュールとして実行されている場合にのみ機能します。OPは、PHPがLightspeed上で実行されていると述べています。
MrWhite

5

Linuxシステムを使用している場合は、次のフォルダーでapache2のすべての有効化モジュール(私の場合)を確認できます:/ etc / apache2 / mods-available

cd /etc/apache2/mods-available

次のように入力します:ll -a
php(この場合はphp 7)フォルダーの利用可能なモジュールを確認する場合/etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

入力し: ll -a


4

新しいページを作成し、このコードを追加するだけです

 <?php
 if(!function_exists('apache_get_modules') ){ phpinfo(); exit; }
 $res = 'Module Unavailable';
 if(in_array('mod_rewrite',apache_get_modules())) 
 $res = 'Module Available';
?>
<html>
<head>
<title>A mod_rewrite availability check !</title></head>
<body>
<p><?php echo apache_get_version(),"</p><p>mod_rewrite $res"; ?></p>
</body>
</html>

そして、このページを実行すると、モジュールが利用可能かどうかを見つけることができます。そうでない場合は、ホスティングに尋ねるか、ローカルマシンでそれを有効にするかどうかを確認してから、このYouTubeのステップバイステップチュートリアルを確認して、Wamp Apacheで書き換えモジュールを有効にします。 https://youtu.be/xIspOX9FuVU?t=1m43s Wampサーバーアイコン-> Apache-> Apacheモジュール、およびrewrite moduleオプションを確認


2

私はこの質問が古いことを知っていますが、Apache構成ファイルを編集しAllowOverride AllAllowOverride None

<Directory "${SRVROOT}/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

正確な名前と、可能であれば変更が必要なファイルの場所を伝えることをお勧めします。初心者の参考になります。ありがとう
MindRoasterMir

また、変更は、Apacheを再表示した後にのみ有効になることに注意してください。ありがとう
MindRoasterMir

1

次のように入力して、ファイルが存在するかどうかを確認するだけです

cat /etc/apache2/mods-available/rewrite.load

で始まる結果行にはコメントを付けることができません #


1

このコードは私のために働きました:

if (strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false) echo "mod_rewrite enabled";
else echo "mod_rewrite disabled";

0

私は正確な問題を抱えていました、カスタム構造をクリックしてから追加/index.php/%postname%/して問題を解決しました

これにより、一体何が悪いのかを見つけるのに苦労したことを誰かが救ってくれることを願っています。

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