RomanDillerNsk
@RomanDillerNsk
JavaScript

Почему на запросе без слеша в конце URL возвращается редирект на URL со слешем?

Коллеги, доброго времени суток, суть проблемы такова, стандартный сайт на nodejs + express, все просто главный файл:

const path = require('path');
const http = require('http');
const express = require('express');
const helmet = require('helmet');
const minify = require('express-minify-html');
const session = require('express-session');
const favicon = require('express-favicon');
const MySQLStore = require('connect-mysql')(session);
const bodyParser = require("body-parser");
const compression = require('compression');
const config = require('./config.json');
const router = require('./controllers/router');

const app = express();
app.use(helmet());

app.use(session({
    cookie: {
        path: '/',
        httpOnly: true,
        maxAge: 24 * 60 * 60 * 1000
    },
    store: new MySQLStore({
        config: {
            user: config.db.user,
            password: config.db.password,
            database: config.db.name
        }
    }),
    key: config.session.key,
    secret: config.session.secret,
    resave: true,
    saveUninitialized: false
}));

app.use(compression());
app.use(minify({

    override:      true,
    exception_url: false,
    htmlMinifier: {

        removeComments:            true,
        collapseWhitespace:        true,
        collapseBooleanAttributes: true,
        removeAttributeQuotes:     true,
        removeEmptyAttributes:     true,
        minifyJS:                  true,
        minifyCSS:                  true

    }

}));

app.use(favicon(path.join(__dirname, '/favicon.ico')));
app.set('views', path.join(__dirname, 'dist'));
app.set('view engine', 'ejs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static(__dirname + '/dist'));
app.use(router);

app.use((req, res, next) => {

	next(404);

});

app.use((err, req, res, next) => {

    res.status(err.status || 404);
    res.render('404/index.ejs');

});

const server = http.createServer(app);
server.listen(config.port, () => {

  	

});


и собственно роутер:

// router
'use strict';
const express = require('express');
const router = express.Router({ strict: true });

const home = require('./home');
router.get('/', home.get);

const contacts = require('./contacts');
router.get('/contacts', contacts.get);

const corporative = require('./corporative');
router.get('/corporative', corporative.get);

const authenticity = require('./authenticity');
router.get('/authenticity', authenticity.get);

module.exports = router;


Вообще все должно быть понятно и не вызвать вопросов, но есть маленький ньюанс, всегда было все норм с этим кодом))))) но начал новый проект, и браузер теперь делает к странице 2 запроса, вот скрин:

5cd28ce4d2f57957664417.png

В чем проблема, подскажите, всю голову сломал. Причем мой роутер отрабатывает только запрос вида /url/, а второй даже не доходит
Вот конфиг апача, на всякий случай:

<VirtualHost *:80>

	ServerAdmin sa@testsite.ru
	ServerName testsite.localhost
	ServerAlias www.testsite.localhost

	ProxyRequests on
	<Proxy *>
	    Order deny,allow
	    Allow from all
	</Proxy>
	<Location />
	    ProxyPass  http://127.0.0.1:5263/
	    ProxyPassReverse  http://127.0.0.1:5263/
	</Location>

	#RewriteEngine on
	#RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
	#RewriteRule . %1/&2 [R=301,L]

	#RewriteCond %{REQUEST_FILENAME} !d
	#RewriteCond %{REQUEST_URI} ^(.+)/$
	#RewriteRule ^(.+)/$ $1 [R=301,L]

	#RewriteCond %{SERVER_NAME} =testsite.online [OR]
	#RewriteCond %{SERVER_NAME} =www.testsite.online

</VirtualHost>


в моем случае он выступает как прокси, и собственно ничего не делает, кроме перенаправления запроса.
  • Вопрос задан
  • 621 просмотр
Пригласить эксперта
Ответы на вопрос 2
Lynn
@Lynn
nginx, js, css
1. Редирект 301 кешируется браузером верить ему нельзя. Проверьте curl-ом/wget-ом. Проверьте логи апача.
2. Если таки запрос дошёл до сервера, проверьте дошёл ли он до ноды. Если не дошёл, то копать апач, если дошёл — копать ноду.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы