我使用默认的 express 库在 nodejs 中创建了一个简单的静态页面。但是,当我运行它时,nodejs 无法获取公共文件并向它们抛出 404。
我相信我给出的路径是正确的。这让我发疯。我知道问题必须如此微小和简单才能值得面对,但我无法找到它。
你能在这里帮助我吗?
代码位于 github 上的 Rishavs/ComingSoonPage
感谢您的时间和帮助。
~ 里沙夫
我使用一个.htaccess文件将所有请求重定向到同一个index.php. 从那里,我根据传入请求的 URL 决定要做什么。
现在,我将请求 URL映射到相对于source文件夹的目录结构,以便example.com/user/create映射到source/user/create/index.php. 位于那里的文件可以根据需要处理请求,并生成 HTML 输出。
但这不适用于静态资产,浏览器可能会请求。所以我的想法是找出请求 URL 是否以文件扩展名结尾并将其映射到相对于assets文件夹的目录结构,以便example.com/css/default.css映射到assets/css/default.css. 但我不知道如何使用静态文件而不是来自 PHP 的 HTML 代码进行响应。
通常,这可能会使用附加.htaccess规则来完成,但我想在代码中动态更改资产文件夹。
如何将服务器硬盘上给出的静态文件发送到 PHP 中的浏览器客户端?
我在 Digitalocean 服务器上完成了 Dokku 部署。我的应用程序似乎可以工作,除了我的静态文件。
以下是我的 settings.py 文件的相关部分:
PROJECT_DIR = Path(__file__).absolute().ancestor(2)
MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
PROJECT_DIR.child('static'),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
STATIC_ROOT = PROJECT_DIR.child('staticroot')
Run Code Online (Sandbox Code Playgroud)
有人知道如何将我的应用指向基于 Dokku 的系统上的静态文件吗?
虽然它没有回答我的问题,但我们目前正在提供来自 AWS S3 的静态文件,并且有效。它使我的问题不那么紧迫,但我仍然想知道是否可以“在本地”解决它。
我有一个大型网站,在各个 html 页面中包含数百个 href=".html、href="css/、href="img/ 和 src="js/ 引用。我已将所有 css、js、img、声音等文件夹放在“static”文件夹中,并将所有 html 文件放在“模板文件夹”中。
我不想浏览所有 html 文件并使用 Flask 的“url_for”函数手动编辑每个 href。
有没有一种方法可以让我保留现有的 html 文件并告诉 Flask 使用这些 html 文件中定义的 css/、js/ 和图像路径?
现在以下代码会导致一堆 404 错误
import os
from flask import Flask, render_template
PROJECT_PATH = os.path.dirname(os.path.realpath(__file__))
app = Flask(__name__,
template_folder=os.path.join(PROJECT_PATH, 'templates'),
static_folder=os.path.join(PROJECT_PATH, 'static')
)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
Run Code Online (Sandbox Code Playgroud)
好的,根据 Martijn 的脚本,我使用以下代码运行了我的网站。但是,为了捕获 index.html 文件中的许多 href=someHTMLfile.html 链接,我添加了 @app.route('/')。我想知道是否有更好的方法来做到这一点?
from flask import Flask, render_template, safe_join, send_from_directory
app = Flask(__name__)
@app.route('/<any(css, js, img, fonts, …Run Code Online (Sandbox Code Playgroud) 我在使用 Node.Js/Express.js 的 Windows 环境中遇到问题,静态 JS 文件可以在浏览器中标记为“待处理”(禁用缓存)长达两分钟,之后它们似乎可以正常下载. 这通常发生在几次刷新后。
没有显示任何错误,所以我不确定如何进一步调查。相同的代码在 Mac OSX 环境中运行良好。
Node 版本是 v0.10.31,Express 是 4.8.5。
静态文件的代码是:
app.use(express.static(path.join(__dirname, 'public')));
Run Code Online (Sandbox Code Playgroud)
Chrome DevTools 显示:

我有以下代码:
...
var servceStatic = require("serve-static");
var app = express();
app.use(express.compress());
app.use(servceStatic('static'));
...
Run Code Online (Sandbox Code Playgroud)
不知何故,它设法为所有类型的文件提供服务,但那些以“.json”结尾的文件除外。为什么是这样?
我目前正在从事一个项目,我需要为驻留在文件系统上的静态文件(在 JAR 文件之外)提供服务。
我目前拥有的:
@Configuration
@ComponentScan({"some.package"})
public class MaboConfiguration extends WebMvcConfigurerAdapter {
/* Irrelevant configs omitted */
@Value("${application.pdfpath}")
public String pdfPath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/files/**")
.addResourceLocations("file:" + this.pdfPath);
super.addResourceHandlers(registry);
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于配置的“pdfPath”目录中的大多数文件。现在的问题是,无法找到包含特殊字符(如:“ä”、“ö”、“ü”...)的文件,服务器返回 404。
工作文件示例(假设 pdfPath 为 /opt/tst/):
"/opt/tst/tstdir/with some space/01 - my tst pdf.pdf" -> is served under
"http://localhost:8100/contextRoot/files/tstdir/with some space/01 - my tst pdf.pdf"
Run Code Online (Sandbox Code Playgroud)
不工作文件的示例:
"/opt/tst/tstdir/with some space/01 - my ätst pdf.pdf" -> should be served under
"http://localhost:8100/contextRoot/files/tstdir/with some space/01 - my ätst pdf.pdf"
Run Code Online (Sandbox Code Playgroud)
我认为这可能是编码问题。日志显示传入的请求是正确的 URL …
我有一个 Web 应用程序(由 uwsgi 提供的 django),我正在使用 nginx 代理对特定容器的请求。这是我的 default.conf 中的相关片段。
upstream web.ubuntu.com {
server 172.18.0.9:8080;
}
server {
server_name web.ubuntu.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location / {
include uwsgi_params;
uwsgi_pass uwsgi://web.ubuntu.com;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我希望从 nginx 而不是 uwsgi 工作人员提供静态文件。
所以基本上我想添加如下内容:
location /static/ {
autoindex on;
alias /staticfiles/;
}
Run Code Online (Sandbox Code Playgroud)
到容器自动生成的服务器块。
我相信这应该使 nginx 服务于 /staticfiles 文件夹中对 web.ubuntu.com/static/* 的所有请求。
但是由于配置(default.conf)是自动生成的,我不知道如何将上述位置动态添加到服务器块:(
我认为位置块不能在服务器块之外,每个服务器只能有一个服务器块?
所以我不知道如何在那里添加位置块,除非我在 nginx 出现后动态添加到 default.conf 然后我猜想重新加载它。
我确实通过了https://github.com/jwilder/nginx-proxy并且我只看到了一个实际更改每个主机和默认位置设置的示例。但是完全没有添加新位置。
我已经在 jwilder/nginx-proxy 的问答中发布了这个,但没有得到回应。
如果有办法实现这一点,请帮助我。
我想制作一个应用程序,我需要基域上的静态页面和子目录上的 Blazor 应用程序。
例子:
https://example.com 是我的静态页面应该在哪里(如“/features”或“/pricing”或“/faq”)
https://example.com/app 应该是我的 blazor 网站所在的地方。
我已经看到我可以传入一个PathStringtoapp.UseBlazorFrameworkFiles但这不起作用 ( app.UseBlazorFrameworkFiles(new PathString("/app"))。我的 Blazor 应用托管在带有 gRPC 的 .NET 5 WebApi 项目上。
有人可以指出我如何实现这一目标的正确方向吗?
提前致谢!
Express 能够在不同的虚拟位置提供静态文件:
app.use('/static', express.static('public'))
Run Code Online (Sandbox Code Playgroud)
但是,我在使用 Spark Java 的服务器上使用 Java。我知道如何提供静态文件,但 Spark Java 是否可以在虚拟位置提供静态文件?如果可能,如何?我已经搜索了一段时间,但我找到的所有教程都只是告诉我如何提供静态文件,而不是在虚拟位置提供静态文件。
编辑:“虚拟位置”的解释:假设这是当前目录:
public/
|-----index.html
|-----style.css
|-----etc...
Run Code Online (Sandbox Code Playgroud)
然后,我们可以http://localhost:8080/public/index.html
用
http://localhost:8080/somedir/virtual/pathindex.html
static-files ×10
node.js ×3
express ×2
java ×2
.net ×1
assets ×1
blazor ×1
deployment ×1
django ×1
docker ×1
dokku ×1
flask ×1
httprequest ×1
javascript ×1
json ×1
php ×1
python ×1
routes ×1
server ×1
spark-java ×1
spring-boot ×1
spring-mvc ×1