是否可以使用通用规则从.htaccess
的任何目录或子目录重定向到特定页面?
更准确地说,如果我想将example.com/login
这样的网址重定向到example.com/login.php?action=login
,我会在.htaccess
文件中使用以下行:
RewriteRule ^login$ /login.php?action=login [L]
但是否有可能让我从example.com/any_directory/login
重定向到example.com/login.php?action=login
的规则?所以从example.com
子目录到``example.com/login.php?action = login`。如果是,我该怎么做呢
答案 0 :(得分:1)
您需要调整正则表达式模式。只需删除 ^ ,以便它可以在uri之前 login / 之前匹配任何一个,即: / foobar / login 。
RewriteRule /login/?$ /login.php?action=login [L]
答案 1 :(得分:1)
当然这是可能的。最简单的方法是使用重写条件,因为即使在动态配置文件中,它也会在绝对请求路径上运行。重写规则在相对路径上运行,这使得匹配变得复杂......
看看这个简单的例子:
RewriteEngine on
RewriteCond %{REQUEST_URI} /login$
RewriteRule ^ /login.php?action=login [L]
如果您在http服务器主机配置中进行重写,则可以简化该操作。原因是它始终是规则在该位置工作的绝对路径:
RewriteEngine on
RewriteRule /login$ /login.php?action=login [L]
两种变体的主要方法是依赖登录关键字之前的斜杠。它始终存在于绝对请求路径中,并且明确地左键分隔关键字。并且不坚持在行开始时匹配。
一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。