Как запретить доступ к URL, если он содержит строку «.html» (используя htaccess, я хочу получить 404) - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть внешний javascript, который генерирует форму согласия на использование файлов cookie, защиту данных и т. Д. Сценарий загружается на страницы клиентов с моего сервера и проверяет наличие URL-адреса для информации о защите данных.Для лучшего понимания здесь я покажу только функции javascript, которые имеют непосредственное отношение к вопросу:

var ping_url = function (url) {
    var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    request.open('HEAD', url, true);
    request.send();
    if (request.status === "404") return false;
    else return true;
};

var find_page = function () {
    var pages = [];
        pages.push('./datenschutz.html'); // I want a 404 for this
        pages.push('./service/datenschutz.html'); // I want a 404 for this
        pages.push('./service/datenschutz'); // I want a 200 for this
    var i, s, len = pages.length;
    for (i=0; i<len; ++i) {
        if (i in pages) {
            s = pages[i];
            if (ping_url(s)) return s;
        }
    }
    return window.location.href + '#404'; //fallback to actual page
};

Это работает хорошо, если используются URL-адреса с конечным ".html".Сейчас я работаю над сайтом клиентов, где URL-адреса не содержат «.html», а только «/ user / 23456» или «/content/here-is-the-friendly-readable-url".

Вопрос в том, как мне нужно изменить файл htaccess таким образом, чтобы mod_rewrite обрабатывал все остальные параметры, но отправлял 404, если URL содержит или заканчивается строкой ".html"?

Вотактуальный неизмененный файл .htaccess, который до сих пор прекрасно работает.

<IfModule mod_rewrite.c>

    Options +FollowSymLinks
    RewriteEngine On

    RewriteCond %{QUERY_STRING} ^(.*)?$
    RewriteRule ^/?(.*/)?de/([^.]*)(.[^\?]*)? index.php?lang=1&rewrite_values=$2&%1 [L]
    RewriteRule ^/?(.*/)?en/([^.]*)(.[^\?]*)? index.php?lang=2&rewrite_values=$2&%1 [L]
    RewriteRule ^/?(.*/)?fr/([^.]*)(.[^\?]*)? index.php?lang=3&rewrite_values=$2&%1 [L]
    RewriteRule ^/?(.*/)?it/([^.]*)(.[^\?]*)? index.php?lang=4&rewrite_values=$2&%1 [L]
    RewriteRule ^/?(.*/)?es/([^.]*)(.[^\?]*)? index.php?lang=5&rewrite_values=$2&%1 [L]
    RewriteRule ^/?(.*/)?hu/([^.]*)(.[^\?]*)? index.php?lang=6&rewrite_values=$2&%1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    #RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^ index.php?page_id=1&lang=1&show_lang_select=1 [L]
    RewriteRule ^(.+)$ index.php?lang=1&page_id=1 [QSA,L]

</IfModule>

1 Ответ

0 голосов
/ 16 февраля 2019

Вы можете использовать это:

  <IfModule mod_rewrite.c>

    Options +FollowSymLinks
    RewriteEngine On
    #redirect .html files to /404
    RewriteCond ℅{THE_REQUEST} \.html [NC]
    RewriteRule ^ - [R=404,L]
    #handle extension less html files
    RewriteCond ℅{REQUEST_FILENAME}.html -f
    RewriteRule ^(.+)/?$ $1.html [L]

    RewriteCond %{QUERY_STRING} ^(.*)?$
    RewriteRule ^/?(.*/)?de/([^.]*)(.[^\?]*)? index.php?lang=1&rewrite_values=$2&%1 [L]
    RewriteRule ^/?(.*/)?en/([^.]*)(.[^\?]*)? index.php?lang=2&rewrite_values=$2&%1 [L]
    RewriteRule ^/?(.*/)?fr/([^.]*)(.[^\?]*)? index.php?lang=3&rewrite_values=$2&%1 [L]
    RewriteRule ^/?(.*/)?it/([^.]*)(.[^\?]*)? index.php?lang=4&rewrite_values=$2&%1 [L]
    RewriteRule ^/?(.*/)?es/([^.]*)(.[^\?]*)? index.php?lang=5&rewrite_values=$2&%1 [L]
    RewriteRule ^/?(.*/)?hu/([^.]*)(.[^\?]*)? index.php?lang=6&rewrite_values=$2&%1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    #RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^ index.php?page_id=1&lang=1&show_lang_select=1 [L]
    RewriteRule ^(.+)$ index.php?lang=1&page_id=1 [QSA,L]

</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...