現在、私はlightspeed serverでホスティングを使用しています。ホスティングではmod_rewrite
が有効になっていますが、そこでスクリプトを機能させることができません。 URLにアクセスしようとすると、404-not found pageが返されます。
Apacheで実行されている別のサーバーに同じコードを配置します。あちらで働いています。だから、.htaccess
とmod_rewrite
の問題だと思います。
しかし、ホスティングサポートはmod_rewriteがオンになっていることを引き続き主張しているので、実際に有効になっているかどうかを確認する方法を知りたいと思います。
phpinfo()
で確認しようとしましたが、運がありません。mod_rewrite
が見つかりません。lightspeed
を使用しているからですか?
チェックする方法はありますか?私を助けてください。ありがとうございました。
FYI:私の.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]
しかし、同じ結果。
Mod_rewriteモジュールが有効になっているかどうかを確認するには、WAMPサーバーのルートフォルダーに新しいphpファイルを作成します。次のように入力します
phpinfo();
作成したファイルにブラウザからアクセスします。
CtrlF 検索を開きます。 「mod_rewrite」を検索します。有効にすると、「ロードされたモジュール」として表示されます
そうでない場合は、httpd.conf(Apache Configファイル)を開き、次の行を探します。
#LoadModule rewrite_module modules/mod_rewrite.so
開始時にポンド( '#')記号を削除し、このファイルを保存します。
Apacheサーバーを再起動します。
ブラウザで同じphpファイルにアクセスします。
「mod_rewrite」を再度検索します。あなたは今それを見つけることができるはずです。
コマンドラインから次のように入力します
Sudo a2enmodの書き換え
書き換えモードがすでに有効になっている場合は、その旨が表示されます!
仮想ホスト設定ファイルを使用している場合は、問題の仮想ホストに次のようなディレクティブAllowOverride All
があることを確認してください。
<VirtualHost *:80>
...
<Directory "directory/of/your/.htaccess">
AllowOverride All
</Directory>
</VirtualHost>
Apache_get_modules()が認識されないか、phpinfo()でこのモジュールに関する情報がない場合。 .htaccessファイルに次の行を追加して、modの書き換えをテストしてみてください。
RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php
そしてmod_rewrite.php:
<?php echo "Mod_rewrite is activated!"; ?>
コンソール:
<VirtualHost *:80>
...
<Directory ...>
AllowOverride All
</Directory>
</VirtualHost>
Sudo a2enmod rewrite
Sudo service Apache2 restart
もし
in_array('mod_rewrite', Apache_get_modules())
true
を返し、mod-rewriteが有効になります。
このコードが.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サーバーエラーが表示された状態でサイトの任意のページにアクセスできます。modの書き換えが有効になっていると言っても安全だと思います。
PHPの定義済みApache_get_modules()
関数は、有効なモジュールのリストを返します。 mod_rewrite
が有効になっているかどうかを確認するには、サーバーで次のスクリプトを実行できます。
<?php
print_r(Apache_get_modules());
?>
上記の例が失敗した場合、.htaccess
ファイルを使用してmod-rewriteを検証できます。
ドキュメントルートにhtaccess
ファイルを作成し、次のrewriteRuleを追加します。
RewriteEngine on
RewriteRule ^helloWorld/?$ /index.php [NC,L]
http://example.com/HelloWorld にアクセスすると、内部的に/ index.phpページに転送されますサイト。それ以外の場合、mod-rewriteが無効になっていると、500 Internelサーバーエラーが発生します。
お役に立てれば。
これはCentOSで機能します。
$ Sudo httpd -M |grep rewrite_module
rewrite_module (shared)
を出力する必要があります
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
PHP関数を使用できます
Apache_get_modules
mod_rewriteを確認します
<pre>
<?php
print_r(Apache_get_modules());
?>
</pre>
新しいページを作成してこのコードを追加するだけです
<?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>
このページを実行して、モジュールが利用可能かどうかを見つけることができます。そうでない場合は、ホスティングに依頼するか、ローカルマシンで有効にするかどうかを確認してから、Wamp Apacheの書き換えモジュールを有効にすることに関連するこのYouTubeのステップバイステップのチュートリアルを確認してください https://youtu.be/xIspOX9FuVU?t=1m43s Wampサーバーアイコン-> Apache-> Apache Modulesおよびrewrite moduleオプションを確認します。
私はこの質問が古いことを知っていますが、Apache設定ファイルをAllowOverride All
からAllowOverride 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>
入力するだけで、ファイルがそこにあるかどうかを確認する必要があります
cat /etc/Apache2/mods-available/rewrite.load
#
で始まる結果行はコメント化されない場合があります
私は正確な問題を抱えていたので、カスタム構造をクリックしてから/index.php/%postname%/
を追加して解決しました
これが誰かが私がそれで何が間違っていたのかを見つけたストレスを救うことを願っています。
このコードは私のために働いた:
if (strpos(Shell_exec('/usr/local/Apache/bin/apachectl -l'), 'mod_rewrite') !== false) echo "mod_rewrite enabled";
else echo "mod_rewrite disabled";