【发布时间】:2017-12-22 11:52:56
【问题描述】:
其实我有两个问题:
首先,我尝试将几个短 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>
为什么会这样,我该如何解决?
【问题讨论】:
-
login.php在哪里?如果您可以控制 Apache.conf文件,那么您不需要 .htaccess -
@anubhava 在根目录的不同目录下。比如
www.site.com/subdir1/login.php或www.site.com/subdir2/login.php。 -
井规则需要指向一个特定位置。您不能将一个文件保存在多个地方,并希望它会被自己找到。
-
问题是,
^/login?$ ^login.php?action=login&next=$1规则可以正常工作。这是另一个没有的——^/reset?$ ^login.php?action=reset&next=$1 [L]。 -
是的,我知道它为什么有效。由于
MultiViews,它正在写入login.php,但如果您检查$_GET中的login.php内容,那么您可能无法获得查询参数。
标签: php apache .htaccess redirect mod-rewrite