文件夹存在时允许来源不起作用
Allow-Origin does not work when folder exists
例如,考虑由 http:///localhost/htaccess-test 上的 apache2 提供的页面。
文件夹可能如下所示:
htaccess-test
|- .htaccess
|- index.php
这是.htaccess:
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, PATCH, OPTIONS"
RewriteEngine on
RewriteRule ^ index.php [QSA,L]
每个呼叫都会被重定向到 index.php 并由 PHP(或其他)从那里处理。
现在在不同的端口或主机上生成一个客户端:
<html>
<body>
<script>
(function() {
const xhttp = new XMLHttpRequest();
xhttp.open("PUT", "http://localhost/htaccess-test/foo");
xhttp.send();
})();
</script>
</body>
</html>
有效。但是,如果您将文件夹 'foo' 添加到页面的文件夹 ('htaccess-test'),调用会导致 CORS 错误!
谁能帮我避免这种情况!我有一个名为 'test' 的 Endpojnt,它与测试文件夹冲突...
xhttp.open("PUT", "http://localhost/htaccess-test/foo");
如果 /foo
是物理目录,则 mod_dir 将发出 301 重定向以附加尾部斜杠。重定向响应不会设置 CORS headers,因为您没有将 always
条件与 Header
指令一起使用,因此会出现 CORS 错误。
但是,我希望您首先不想要尾部斜线,因此您需要防止 mod_dir 附加尾部斜线。
在 .htaccess
文件的顶部添加以下内容:
# Prevent mod_dir appending a trailing slash to directories
DirectorySlash Off
但是,由于您要禁用目录斜杠,因此需要确保目录列表也被禁用,因为 DirectoryIndex 文档(在该目录中)的存在将不再阻止 mod_autoindex 生成目录列表(如果尾部斜杠被省略)。在 .htaccess
文件的顶部添加以下内容(如果您还没有):
# Prevent mod_autoindex from generating directory listings.
Options -Indexes
如果您需要直接访问任何目录,则需要根据需要手动附加尾部斜杠(使用外部重定向或内部重写)。
例如,考虑由 http:///localhost/htaccess-test 上的 apache2 提供的页面。
文件夹可能如下所示:
htaccess-test
|- .htaccess
|- index.php
这是.htaccess:
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, PATCH, OPTIONS"
RewriteEngine on
RewriteRule ^ index.php [QSA,L]
每个呼叫都会被重定向到 index.php 并由 PHP(或其他)从那里处理。
现在在不同的端口或主机上生成一个客户端:
<html>
<body>
<script>
(function() {
const xhttp = new XMLHttpRequest();
xhttp.open("PUT", "http://localhost/htaccess-test/foo");
xhttp.send();
})();
</script>
</body>
</html>
有效。但是,如果您将文件夹 'foo' 添加到页面的文件夹 ('htaccess-test'),调用会导致 CORS 错误!
谁能帮我避免这种情况!我有一个名为 'test' 的 Endpojnt,它与测试文件夹冲突...
xhttp.open("PUT", "http://localhost/htaccess-test/foo");
如果 /foo
是物理目录,则 mod_dir 将发出 301 重定向以附加尾部斜杠。重定向响应不会设置 CORS headers,因为您没有将 always
条件与 Header
指令一起使用,因此会出现 CORS 错误。
但是,我希望您首先不想要尾部斜线,因此您需要防止 mod_dir 附加尾部斜线。
在 .htaccess
文件的顶部添加以下内容:
# Prevent mod_dir appending a trailing slash to directories
DirectorySlash Off
但是,由于您要禁用目录斜杠,因此需要确保目录列表也被禁用,因为 DirectoryIndex 文档(在该目录中)的存在将不再阻止 mod_autoindex 生成目录列表(如果尾部斜杠被省略)。在 .htaccess
文件的顶部添加以下内容(如果您还没有):
# Prevent mod_autoindex from generating directory listings.
Options -Indexes
如果您需要直接访问任何目录,则需要根据需要手动附加尾部斜杠(使用外部重定向或内部重写)。