Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 为什么heroku会重定向;文件夹式;通过301到http的请求?_.htaccess_Heroku_Redirect - Fatal编程技术网

.htaccess 为什么heroku会重定向;文件夹式;通过301到http的请求?

.htaccess 为什么heroku会重定向;文件夹式;通过301到http的请求?,.htaccess,heroku,redirect,.htaccess,Heroku,Redirect,我有一个在heroku上运行的spa,我想让它在强制https上运行。我使用PHP堆栈进行一些基本的身份验证,没有什么特别的,只有一个index.PHP。虽然这应该很容易,但我有一个奇怪的重定向: 例如,当我访问/appStart时,我会在日志中看到: 10.8.149.25 - - [13/Feb/2021:19:23:57 +0000] "GET /appStart HTTP/1.1" 301 248 "-" "Mozilla/5.0 (Ma

我有一个在heroku上运行的spa,我想让它在强制https上运行。我使用PHP堆栈进行一些基本的身份验证,没有什么特别的,只有一个index.PHP。虽然这应该很容易,但我有一个奇怪的重定向: 例如,当我访问/appStart时,我会在日志中看到:

10.8.149.25 - - [13/Feb/2021:19:23:57 +0000] "GET /appStart HTTP/1.1" 301 248 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36
这是我的.htaccess:


RewriteEngine On

#Force SSL 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_URI} !\.(png|css|js|json|txt|ico)$
RewriteCond %{REQUEST_URI} !_nuxt
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
我在.htaccess中将https重写切换为302,以确保重定向不会违反我的规则,因此。。。
301从何而来?

如果
appStart
是一个物理目录,并且您请求
/appStart
(无尾随斜杠),则mod_dir(Apache)将使用301重定向“修复”URL以追加尾随斜杠。例如,
/appStart/

如果
appStart
是一个物理目录,则应该请求
/appStart/
(带尾随斜杠)

更新:请确保:
目录删除
将解决我的问题,对吗

(我假设您的
.htaccess
文件位于
/appStart/.htaccess
?)

事实上要比这复杂一点。如果目录上没有尾随斜杠,则将无法处理
.htaccess
中的mod_rewrite指令,并且前端控制器(内部重写为
index.php
)将失败。其他问题,如
DirectoryIndex
(mod_dir)也将失败-尽管您似乎并不依赖于此(您使用的是mod_rewrite)

最终结果是,您可能会得到403禁止响应(除非您启用了mod_autoindex-在这种情况下,您将得到一个自动生成的目录列表,尽管存在
DirectoryIndex
文档!请参阅Apache文档中的。)

简而言之,Apache需要尾部斜杠

如果使用
directorysash Off
禁用尾部斜杠的自动追加,则需要自己手动追加此尾部斜杠以避免这些问题。您需要在parent/root
.htaccess
文件中执行此操作,而不是
/appStart/.htaccess

例如。。。将现有的
/appStart/.htaccess
文件移动到根
/.htaccess
文件,包括
指令slash Off
指令,并将最后一个
RewriteRule
指令更改为:

RewriteRule ^appStart appStart/index.php [L]

但是,这并不一定能完全解决问题(取决于应用程序的结构),因为应用程序中的任何相对URL路径(到静态资源等)现在都是相对于文档根目录的,而不是像以前那样相对于
/appStart/
子目录的。这是一个客户端URL问题,只能通过“修复”客户端URL来解决。

这可能不是Heroku,而是
index.php
中的某个内容。index.php包含一些cookie检查(身份验证),然后包含一次(“index.html”);。就这样,没有重写/重定向。事实上,出于测试目的,我删除了php,并将上一个重写规则更改为
index.html
——同样的行为!可以肯定的是:DirectorySlash Off将解决我的问题,对吗?不幸的是,它可能没有那么容易。我已经更新了我的答案。