mod_rewrite重定向无法按预期工作

问题描述 投票:1回答:1

我实际上有两个问题:

首先,我正在尝试将多个短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>

为什么这样,我该如何解决?

php apache .htaccess redirect mod-rewrite
1个回答
1
投票

只是从我上面的评论中延伸出来。将这些规则放在您的站点根目录.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

© www.soinside.com 2019 - 2024. All rights reserved.