Apache 2.4 mod_rewrite和htaccess

时间:2015-10-21 01:02:43

标签: apache .htaccess centos

我正在从PHP 5.3.3 / Apache 2.2迁移到PHP 5.6.13 / Apache 2.4,并且正在努力改写重写规则。

在我的子目录中,我有一个htaccess文件,但其中的重写规则不会被应用。

Options +SymLinksIfOwnerMatch
RewriteEngine on
Rewritebase /dir/module/

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteRule ^edit/([0-9]+) /dir/module/edit.php?id=$1 [L]

我打开了重写日志记录,在这里我可以看到一个条目看起来好像重写的是edit.php / 186591而不是edit.php?id = 186591但是我不知道是不是是正常与否:

[Wed Oct 21 00:34:52.207212 2015] [rewrite:trace3] [pid 19507] mod_rewrite.c(468): 
[client 192.168.1.1:43597] 1.2.3.4 - - [www.domain.com/sid#7f057ae2d120
[rid#7f057b094380/subreq] [perdir /home/domain/public_html/dir/module/] 
applying pattern '^edit/([0-9]+)' to uri 'edit.php/186591'

我哪里错了?

1 个答案:

答案 0 :(得分:1)

问题是由于启用了MultiViews选项。将以下内容放入服务器配置文件中:

AllowOverride Options=All,MultiViews

然后,在htaccess文件中,禁用MultiViews指令:

Options +SymLinksIfOwnerMatch -MultiViews

这应该有效地解决问题。我还要继续说(我在上面评论过),你应该在htaccess文件中的任何一般规则之前加入更具体的规则。因此,

RewriteEngine on
Rewritebase /dir/module/

RewriteRule ^edit/([0-9]+)$ edit.php?id=$1 [L]

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]