我实际上有两个问题:
首先,我正在尝试将多个短网址重定向到包含更多操作的单个网页,如下所示:
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>
为什么会这样,我该如何解决?
答案 0 :(得分: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
是网址,那么Apache将提供/file.html
。