mod_rewrite重定向无法按预期工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mod_rewrite重定向无法按预期工作相关的知识,希望对你有一定的参考价值。
我实际上有两个问题:
首先,我正在尝试将多个短URL重定向到包含更多操作的单个页面,如下所示:
RewriteEngine On
RewriteRule ^/login?$ ^login.php?action=login&next=$1 [L]
RewriteRule ^/reset?$ ^login.php?action=reset&next=$1 [L]
这是在<Directory>
里面的.conf文件中编写的。问题是第一个规则被执行,而第二个规则没有执行,我无法理解为什么。
我也尝试过这样写:
RewriteCond %{REQUEST_URI} /login$
RewriteRule ^login.php?action=login&next=$1 [L]
RewriteCond %{REQUEST_URI} /reset$
RewriteRule ^login.php?action=reset&next=$1 [L]
我应该提一下login.php
不在根目录中,而是在不同的子目录中。
我做错了什么,我该如何解决?
我的第二个问题是,如果我将.htaccess
文件放在根目录中,则.conf文件中的规则不再执行。
在.conf文件中我有这些规则:
<Directory>
Options Indexes FollowSymLinks ExecCGI Includes MultiViews
AllowOverride All
Order allow,deny
Allow from all
RewriteEngine On
</Directory>
为什么这样,我该如何解决?
答案
只是从我上面的评论中延伸出来。将这些规则放在您的站点根目录.htaccess或httpd.conf
文件中:
Options -MultiViews
RewriteEngine On
RewriteRule ^/?login(?:/(.*))?$ subdir1/login.php?action=login&next=$1 [L,NC,QSA]
RewriteRule ^/?reset(?:/(.*))?$ subdir1/login.php?action=reset&next=$1 [L,NC,QSA]
选项MultiViews
(参见http://httpd.apache.org/docs/2.4/content-negotiation.html)由Apache's content negotiation module
使用,它在mod_rewrite
之前运行并使Apache服务器匹配文件扩展名。因此,如果/file
是URL,那么Apache将服务/file.html
。
以上是关于mod_rewrite重定向无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
httpd-vhosts.conf 中的重定向无法在 XAMPP 中按预期工作