我需要有关.htaccess重写规则的帮助。
我有一个可以通过http://api.my.domain/products/all
访问的API,它工作正常并返回结果。
我想重定向用户来http://api.my.domain/admin
到管理文件夹。但它是不工作与目前的规则。
我已经将此添加到.htaccess
,但它不能正常工作的admin
文件夹。
RewriteEngine On
RewriteCond %{Request_Filename} !-F
RewriteCond %{Request_Filename} !-d
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^admin admin/index.php [QSD,L]
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^ public/index.php [QSD,L]
这是当我输入http://api.my.domain/admin
时得到的结果,它破坏了我所有的php重定向:
http://api.drezga.hr/admin/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/admin/admin/checklogin.php
有人能告诉我我做错了什么吗?我花了几个小时却看不出来。
1条答案
按热度按时间nukf8bse1#
/admin
是一个物理目录,那么您应该请求以/admin/
(带一个尾部斜杠)开始,否则Apache/mod_dir将发出301重定向以附加尾部斜杠。前两个 * 条件 *(
RewriteCond
指令)仅被 * 错误地 * 应用于第一个规则。它们需要应用于最后一个规则(重写为public/index.php
),则不必重写为admin/index.php
(这应由DirectoryIndex
处理)。不需要
QSD
标志,因为您要检查查询字符串是否已经为空-没有要丢弃的查询字符串!您可能应该在 condition 上使用
-f
操作符,而不是-F
(它使用子请求,因此效率较低)。请尝试以下操作:
RewriteCond %{REQUEST_FILENAME} !-d
指令防止将对/admin/
的请求传递给public/index.php
。最后额外的
RewriteRule
用于重写对根目录的请求,否则会因为上面提到的 condition 而被忽略。这可以通过扩展DirectoryIndex
指令来避免,尽管如果您有其他需要访问的目录(或不应该路由到public/index.php
),这可能会改变行为。例如: