nginx 基于文件夹的.htaccess重定向

eulz3vhy  于 2023-02-18  发布在  Nginx
关注(0)|答案(1)|浏览(240)

我需要有关.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
有人能告诉我我做错了什么吗?我花了几个小时却看不出来。

nukf8bse

nukf8bse1#

  • 旁白:* 如果/admin是一个物理目录,那么您应该请求以/admin/(带一个尾部斜杠)开始,否则Apache/mod_dir将发出301重定向以附加尾部斜杠。
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]

前两个 * 条件 *(RewriteCond指令)仅被 * 错误地 * 应用于第一个规则。它们需要应用于最后一个规则(重写为public/index.php),则不必重写为admin/index.php(这应由DirectoryIndex处理)。
不需要QSD标志,因为您要检查查询字符串是否已经为空-没有要丢弃的查询字符串!
您可能应该在 condition 上使用-f操作符,而不是-F(它使用子请求,因此效率较低)。
请尝试以下操作:

DirectoryIndex index.php

RewriteEngine On

RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Optimisation (prevent additional filesystem check)
RewriteRule ^public/index\.php$ - [L]

RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . public/index.php [L]
RewriteRule ^$ public/index.php [L]

RewriteCond %{REQUEST_FILENAME} !-d指令防止将对/admin/的请求传递给public/index.php
最后额外的RewriteRule用于重写对根目录的请求,否则会因为上面提到的 condition 而被忽略。这可以通过扩展DirectoryIndex指令来避免,尽管如果您有其他需要访问的目录(或不应该路由到public/index.php),这可能会改变行为。例如:

DirectoryIndex index.php /public/index.php

相关问题