#regex #apache #.htaccess #mod-rewrite #https
#регулярное выражение #apache #.htaccess #мод-перезапись #https
Вопрос:
Я хочу, чтобы все HTTPS были переписаны на HTTP, кроме одной страницы. Проблема в том, что есть страницы, содержащие строку запроса, и другие страницы, содержащие путь к странице. Не следует переписывать только одну страницу, содержащую определенную строку запроса. Я не могу собрать это вместе:
Should be rewritten:
https://domain.tld/index.php?id=1
https://domain.tld/index.php?id=2
[...and so on...]
https://domain.tld/path/page1.html
https://domain.tld/path/page2.html
[...and so on...]
Should NOT be rewritten:
https://domain.tld/index.php?id=999
Ответ №1:
Вы можете использовать это правило для перенаправления всех URI, кроме одного, на https
:
RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} !s/ index.php?id=999[amp;s] [NC]
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R=302,NE,L]
Комментарии:
1. Отлично! Но я имел в виду изменение всех HTTPS на HTTP, кроме одного. Должно быть возможно, отрицая ваш пример, не так ли?
2. Но это работает только для URL-адресов, содержащих строку запроса типа «id = xyz». URL, подобный domain.tld/path/page.html переписывается неправильно на domain.tld/index.php
3. Извините: ваш код работает, ошибка была на моем сайте — мне пришлось поместить код непосредственно под «Перезаписать движок», чтобы он выполнялся перед любыми другими правилами 😉
4. Гладкий ответ… Я бы не подумал о
NE
, отличный вызов. 1 🙂5. Спасибо @zx81, yes
NE
очень удобно при использованииR
, когда URL содержит специальные символы.