apache mod_rewrite无法正常运行或未启用

时间:2011-10-19 04:08:07

标签: apache mod-rewrite

我在Apache上安装了rewrite_module并修改了php.ini

我创建了rewrite.php.htaccess个文件,但它无效。

我的文件系统文件夹如:

/var/www/html
/var/www/html/test
/var/www/html/test/.htaccess
/var/www/html/test/rewrite.php

/var/www/html/.htaccess内容为:

$ cat /var/www/html/test/.htaccess 

RewriteEngine On 
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]

/var/www/html/rewrite.php

$ cat /var/www/html/test/rewrite.php 

<html>
<h2 align=center> 
<?php 
// mod_rewrite Test Page 
// Copyright 2006 Webune.com 
if($_GET['link']==1){echo"You are not using mod_rewrite";} 
elseif($_GET['link']==2){echo"Congratulations!! You are using Apache mod_rewrite";} 
else{echo"Linux Apache mod_rewrte Test Tutorial";} 
?> 
</h2> 
<hr> 
<head> 
<title>How To Test mod_rewrite in Apache Linux Server</title> 
</head> 
<body> 
<p align="center">by <a href="http://www.webune.com">Webune</a></p> 
<p><a href="rewrite.php?link=1">LINK1</a> = rewrite.php?link=1</p>
<p><a href="link2.html">LINK2</a> = link2.html</p> 
<p>How this works: both links are for this same page, except they both are different. link one is without the mod_rewrite and link2 is using mod_rewrite. Link1 show the php file, with with mod_rewrite we are mascarading the php file into a html file. you can use whatever type of extension you want, you can change it to .htm or .shtml etc... all you have to do is to make sure you also chang it in the .htaccess file</p> 
<p>&lt;&lt; <a href="http://www.webune.com/forums/viewtopic-p-62.html">Go back to webune forums.</a></p> 
</body> 
</html>

已安装mod_rewrite.so。

$ ls -l mod_rewrite.so
-rwxr-xr-x 1 root root 59256 Sep 20 23:34 mod_rewrite.so

已加载rewrite_module。

$ cat /etc/httpd/conf/httpd.conf | grep mod_rewrite.so
LoadModule rewrite_module modules/mod_rewrite.so

AllowOverride设置

$ cat /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
    Options Indexes FollowSymLinks

    AllowOverride None

    Order allow,deny
    Allow from all
</Directory>

5 个答案:

答案 0 :(得分:85)

尝试设置:“AllowOverride All”。

答案 1 :(得分:11)

请尝试

sudo a2enmod rewrite

或使用正确的apache restart命令

sudo /etc/init.d/apache2 restart 

答案 2 :(得分:4)

它正在运作。

我的解决方案是:

1.将test.conf创建到/etc/httpd/conf.d/test.conf

2.写了一些规则,比如:

<Directory "/var/www/html/test">
RewriteEngine On
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]
</Directory>

3.重新启动Apache服务器。

4.再次自己。

答案 3 :(得分:1)

为了让mod_rewrite在Apache 2.4中为我工作,我必须在下面添加“Require all granted”行。

<Directory /var/www>
   # Required if running apache > 2.4
   Require all granted

   RewriteEngine on 
   RewriteRule ^cachebust-([a-z0-9]+)\/(.*) /$2 [L] 
 </Directory>
据说,如果您使用的话,Apache 2.2也存在类似的要求:

<Directory /var/www>
   # Required if running apache 2.2
   Order allow,deny
   Allow from all

   RewriteEngine on 
   RewriteRule ^cachebust-([a-z0-9]+)\/(.*) /$2 [L] 
 </Directory>

请注意,ErrorDocument 404指令有时也会覆盖这些内容,因此如果它不起作用,请尝试注释掉ErrorDocument指令并查看它是否有效。上面的示例可用于通过在路径中包含子文件夹来确保不通过缓存提供站点,尽管文件位于服务器的根目录。

答案 4 :(得分:0)

在centOS7上我更改了文件 /etc/httpd/conf/httpd.conf中

来自AllowOverride的

无  to AllowOverride All