Apache 2.4 mod_rewrite 和 htaccess
Apache 2.4 mod_rewrite and htaccess
我正在从 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 ^(.*)$ .php
RewriteRule ^edit/([0-9]+) /dir/module/edit.php?id= [L]
我打开了重写日志记录,在这里我可以看到一个条目,看起来好像尝试重写将要编辑。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'
我哪里错了?
问题是由于启用了 MultiViews
选项。将以下内容放入服务器配置文件中:
AllowOverride Options=All,MultiViews
然后,在 htaccess 文件中,禁用 MultiViews
指令:
Options +SymLinksIfOwnerMatch -MultiViews
这应该可以有效解决问题。我还要继续说(与我上面的评论相同)您应该在 htaccess 文件中的任何一般规则之前放置更具体的规则。因此,
RewriteEngine on
Rewritebase /dir/module/
RewriteRule ^edit/([0-9]+)$ edit.php?id= [L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ .php [L]
我正在从 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 ^(.*)$ .php
RewriteRule ^edit/([0-9]+) /dir/module/edit.php?id= [L]
我打开了重写日志记录,在这里我可以看到一个条目,看起来好像尝试重写将要编辑。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'
我哪里错了?
问题是由于启用了 MultiViews
选项。将以下内容放入服务器配置文件中:
AllowOverride Options=All,MultiViews
然后,在 htaccess 文件中,禁用 MultiViews
指令:
Options +SymLinksIfOwnerMatch -MultiViews
这应该可以有效解决问题。我还要继续说(与我上面的评论相同)您应该在 htaccess 文件中的任何一般规则之前放置更具体的规则。因此,
RewriteEngine on
Rewritebase /dir/module/
RewriteRule ^edit/([0-9]+)$ edit.php?id= [L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ .php [L]