目前我使用的主机与光速服务器。主机说mod_rewrite
是启用的,但我不能让我的脚本在那里工作。每当我尝试访问URL时,它返回404 -未找到页面。
我把相同的代码在另一个服务器与Apache一起运行。它在那边起作用了。所以我猜,这是.htaccess
和mod_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
如果重写模式已经启用,它会告诉你!
-
检查mod_rewrite模块是否启用,在WAMP服务器的根目录下创建一个新的php文件。输入如下
phpinfo();
-
从浏览器访问创建的文件
-
Ctrl F打开搜索。搜索"mod_rewrite"。如果它是启用的,你会看到它是'Loaded Modules'
-
如果没有,打开httpd.conf (Apache配置文件)并查找以下行。
#LoadModule rewrite_module modules/mod_rewrite.so
-
删除开头的#号并保存此文件
-
在浏览器中访问同一个php文件
-
再次搜索'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%/
,它可以工作
希望这能减轻别人的压力,因为我一直在寻找它到底出了什么问题