我在Linux共享托管服务器上使用Node.js.我创建了一个.htaccess文件,以便将访问者重定向到Node应用程序,然后将其存储在user/public_html
目录中。当我访问网站时,主页视图返回404错误,但布局和所有其他视图正确加载。我将Node应用程序存储在user/apps/
目录中。我的.htaccess
文件如下:
RewriteEngine On
RewriteRule ^$ http://127.0.0.1:49923/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://127.0.0.1:49923/$1 [P,L]
My Node server.js文件如下所示:
var express = require('express');
var bodyParser = require('body-parser');
var path = require('path');
var app = express();
var fs = require('fs');
var nodemailer = require('nodemailer');
var dotenv = require('dotenv');
var validator = require('express-validator');
var hbs = require('express-handlebars');
var handlebars = hbs.create({
extname: '.handlebars',
layoutsDir: path.join(__dirname, 'views/layouts'),
defaultLayout: 'main',
partialsDir: path.join(__dirname, 'views/partials')
});
app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');
app.set('views', path.join(__dirname, 'views'));
const http = require('http');
const server = http.createServer();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public')));
app.use(validator());
var express = require('express');
var path = require('path');
var body_parser = require('body-parser');
dotenv.load();
var smtpTransport = nodemailer.createTransport({
host: "smtp.gmail.com",
auth: {
type: "OAuth2",
user: process.env.GMAIL_USER,
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECTRET,
refreshToken: process.env.REFRESH_TOKEN
},
tls: {
rejectUnauthorized: false
}
});
// GET Homepage
app.get('/', function(req, res, next){
res.render('home');
});
// GET About Page
app.get('/about', function(req, res, next){
res.render('about', {
page_id: "about"
});
});
// GET Contact Page
app.get('/contact', function(req, res, next){
res.render('contact', {
page_id: "contact"
});
});
// Server Error
app.use(function(req,res){
res.status(404);
res.render('404');
});
// Program Error
app.use(function(err, req, res, next){
console.error(err.stack);
res.status(500);
res.render('500');
});
app.set('port', process.env.PORT || port);
app.listen(app.get('port'), function () {
console.log('Express started on http://localhost:' + app.get('port') + '; press Ctrl-C to terminate.');
});
我尝试了.htaccess
文件的不同配置而没有运气。当我将变量从后端传递到客户端时,它们似乎没有显示在主页上。我在访问主页时更改了正在加载的视图,并且出现了同样的问题,因此任何视图上的实际代码似乎都没有问题。我检查并更新了Node,NPM和模块的版本;应用程序仍在本地运行,没有任何问题。我尝试使用备用端口,这似乎没有任何区别。看起来主页加载时没有选择'/'
GET请求。而服务器正在检索我的404 Page
。在本地使用时,网站运行良好,这就是为什么我认为它必须是.htaccess
文件的问题。
提前感谢您,任何建议都会有所帮助!如果.htaccess
文件出现问题,请解释任何更改。我肯定看到其他帖子引用了在Apache服务器上运行的Node.js,但我已经遵循了相关的建议。我还没有找到解决这个问题的方法。如果您想发布我最有可能已经看过的一些帖子的链接,请说明您认为哪个部分或响应可以解决此问题。