如何检查 mod_rewrite 是否在服务器上启用?

目前我使用的主机与 光速服务器。托管服务器说 mod_rewrite已经启用,但是我无法让我的脚本在那里工作。无论何时我尝试访问 URL,它都会返回 404没找到页面。

我把同样的代码放在另一个服务器上,这个服务器正在运行 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]

但结果是一样的。

337190 次浏览

如果这段代码在你的. 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服务器错误,我认为这是安全的说,模重写是打开。

  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”,现在应该可以找到它了。

可以使用 php 函数

      apache_get_modules

并检查 mod _ rewrite

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

Http://in2.php.net/apache_get_modules

如果您使用的是虚拟主机配置文件,请确保所涉及的虚拟主机具有如下指令 AllowOverride All:

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

基本上,这个状态允许处理所有.htaccess 指令。

控制台:

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


sudo a2enmod rewrite
sudo service apache2 restart

如果

in_array('mod_rewrite', apache_get_modules())

返回 true,然后启用 mod-rewrite。

如果在 phpinfo ()中无法识别 apache _ get _ module ()或者没有关于这个模块的信息,请尝试通过在。Htaccess 文件:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

还有 mod _ rewrite. php:

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

从命令行输入

改写

如果重写模式已经启用,它会告诉你!

只要创建一个新页面并添加这个代码

 <?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 模块并检查重写模块选项

如果您在 linux 系统中,您可以在以下文件夹中检查 apache2的所有启用模块(在我的例子中) :/etc/apache2/mods-able

cd /etc/apache2/mods-available

输入: ll -a
如果您想检查 php 的可用模块(在本例中是 php 7) 文件夹/etc/php/7.0/mods-可用 < br/>

cd /etc/php/7.0/mods-available

输入: ll -a

这在 CentOS 上是可行的:

$ sudo httpd -M |grep rewrite_module

应该输出 rewrite_module (shared)

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 服务器错误。

希望这个能帮上忙。

你可以在终端机上做,或者:

apachectl -M
apache2ctl -M

取自 2daygeek

您只需要通过键入以下命令来检查文件是否存在

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";

我知道这个问题已经过时了,但是如果您能够将 Apache 配置文件从 AllowOverride None编辑到 AllowOverride All

<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>

首先检查模块是否已安装

apachectl -M

如果它没有显示在列表上,你必须激活它:

a2enmod rewrite

现在,重新启动服务器并进行测试

systemctl restart apache2