如何查看服务器是否开启了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]

但结果是一样的。

在命令行中输入

sudo a2enmod rewrite

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

  1. 检查mod_rewrite模块是否启用,在WAMP服务器的根目录下创建一个新的php文件。输入如下

    phpinfo();

  2. 从浏览器访问创建的文件

  3. Ctrl F打开搜索。搜索"mod_rewrite"。如果它是启用的,你会看到它是'Loaded Modules'

  4. 如果没有,打开httpd.conf (Apache配置文件)并查找以下行。

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. 删除开头的#号并保存此文件

  6. 在浏览器中访问同一个php文件

  7. 再次搜索'mod_rewrite'。你现在应该能找到它了。

如果您正在使用虚拟主机配置文件,请确保所讨论的虚拟主机在以下位置有指令AllowOverride All:

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

基本上,这表示允许处理所有。htaccess指令。

这是CentOS:

$ sudo httpd -M |grep rewrite_module

应该输出rewrite_module (shared)

如果apache_get_modules()未被识别或phpinfo()中没有关于该模块的信息;尝试通过在.htaccess文件中添加这些行来测试mod重写:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

和mod_rewrite.php:

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

console:

<VirtualHost *:80>
        ...
    <Directory ...>
        AllowOverride All
    </Directory>
</VirtualHost>
sudo a2enmod rewrite
sudo service apache2 restart

If

in_array('mod_rewrite', apache_get_modules())

返回true,则mode -rewrite被启用。

PHP的自定义 apache_get_modules() 函数返回一个已启用模块的列表。要检查mod_rewrite是否启用,可以在服务器上运行以下脚本:

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

如果上面的示例失败,您可以使用.htaccess文件验证mod-rewrite。

在文档根目录下创建一个htaccess文件,并添加如下rewriterrule:

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

现在访问http://example.com/HelloWorld,您将被内部转发到您的网站的/index.php页面。否则,如果mod-rewrite被禁用,您将得到一个500 internet服务器错误。

希望这对你有帮助。

您可以在终端上操作:

apachectl -M
apache2ctl -M

取自2daygeek

如果这段代码在你的。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

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

http://in2.php.net/apache_get_modules

如果您是linux系统,您可以在以下文件夹中检查apache2的所有启用模块:/etc/apache2/mods-available

cd /etc/apache2/mods-available

to type: ll -a
如果您想检查可用的PHP模块(在本例中为PHP 7)文件夹/etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

to type: ll -a

我知道这个问题很老了,但是如果你能把你的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>

新建一个页面并添加以下代码

 <?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=1m43sWamp服务器图标-> Apache -> Apache模块,并检查重写模块选项

这个代码为我工作:

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

首先检查模块是否安装

apachectl -M

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

a2enmod rewrite
现在,重新启动服务器并测试
systemctl restart apache2

只需输入

检查文件是否存在

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

结果行不能以#

只需在根目录下创建一个php文件并添加以下代码

<?php
if (in_array('mod_rewrite', apache_get_modules())) {
    echo "mod_rewrite is enabled";
} else {
    echo "mod_rewrite is not enabled";
}

我遇到了确切的问题,我通过点击自定义结构来解决它,然后添加/index.php/%postname%/,它可以工作

希望这能减轻别人的压力,因为我一直在寻找它到底出了什么问题

相关内容

  • 没有找到相关文章

最新更新