У меня есть 10 поддоменов, и я получаю все статические файлы из поддоменов (static.88n8.com).
Я хочу разрешить перекрестный источник для всех поддоменов в .htaccess с помощью этого:
SetEnvIf Origin "^http(s):\/\/(www\.google.com|google\.com|88n8\.com|second\.88n8\.com|third\.88n8\.com|fourth\.88n8\.com)$" OriginDomainStr=$0
Header add Access-Control-Allow-Origin %{OriginDomainStr}e env=OriginDomainStr
Или вот этот:
SetEnvIf Origin "^http(s):\/\/(www\.google.com|google\.com|88n8\.com|second\.88n8\.com|third\.88n8\.com|fourth\.88n8\.com)$" OriginDomainStr=$0
Header set Access-Control-Allow-Origin %{OriginDomainStr}e env=OriginDomainStr
Или вот этот:
SetEnvIf Origin "^http(s):\/\/(www\.google.com|google\.com|88n8\.com|second\.88n8\.com|third\.88n8\.com|fourth\.88n8\.com)$" OriginDomainStr=$0
Header always set Access-Control-Allow-Origin %{OriginDomainStr}e env=OriginDomainStr
И консоль, показывающая мне:
Access to font at 'https://static.88n8.com/font.woff' from origin 'https://88n8.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Что очень странно,Это регулярное выражение должно совпадать, но, похоже, оно совсем не совпадает.
Я попробовал этот, чтобы проверить, могу ли я установить заголовок, и это сработало для основного домена:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "https://88n8.com"
</IfModule>
Донне хотите использовать *
или один домен.Почему мои регулярные выражения никогда не совпадают в .htaccess?Кажется, мой тест на регулярные выражения в порядке.
Отказ от ответственности: 88n8.com - это пример того, как мой домен включает в себя цифры и английские символы.Это не мой настоящий домен, и я не владею им.
Редактировать 1
Как вы можете видеть в моем REGEX, его следует применять ко всем88n8.com
поддоменов и google.com (с https
или http
).Я включил только 4 субдомена в свой REGEX, чтобы показать вам мой REGEX.
Редактировать 2
Я добавил этот код на свои страницы PHP, чтобы узнать текущее происхождение:
echo (isset($_SERVER['HTTP_ORIGIN']))? $_SERVER['HTTP_ORIGIN'] : 'NOT SET';
и результат NOT SET
.Похоже, мой Origin
пуст или равен NULL, и по этой причине REGEX никогда не совпадает.
Редактировать 3
Я проверил IP-адрес сервера с помощью IP2Proxy.Это результат обнаружения прокси:
![Proxy Detection Result](https://i.stack.imgur.com/1kAOb.png)
Изменить 4
Я пытался выбрать что-нибудь, новсе еще нет шансов с этими двумя REGEX:
SetEnvIf Origin "." OriginDomainStr=$0
Header add Access-Control-Allow-Origin %{OriginDomainStr}e env=OriginDomainStr
SetEnvIf Origin "^(?![\s\S])" OriginDomainStr=$0
Header add Access-Control-Allow-Origin %{OriginDomainStr}e env=OriginDomainStr
Как я могу увидеть значение Origin напрямую?