/ / Premenná dynamického prostredia v .htaccess - .htaccess, setenvif

Dynamická premenná prostredia v súbore .htaccess - .htaccess, setenvif

Snažím sa prísť na to, ako na základe môjho scenára dostať premenné prostredia do práce pomocou SetEnvIf, a premýšľal som, či mi niekto môže povedať, ako to urobiť, alebo uviesť príklad.

Môj výsledok je, že potrebujem nasledujúce presmerovanie na oheň na základe rôznych prostredí, mám ďalšie prípady, ktoré budú tiež musieť použiť túto logiku.

Mám nižšie, takže presmerovanie sa deje iba pri výrobe

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV:environment} production
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

Dúfal som, že dokážem nastaviť nasledovné, ale nedokážem na to prísť.

SetEnvIf environment ^(.*)$ environment=production #set it to production, if it is not already set?
SetEnvIf Host ^staging. environment=staging
SetEnvIf Host .dev$ environment=wamp

V ideálnom prípade by bol môj kód psudo

SetEnvIf environment is not set, set to production
SetEnvElse host starts with staging, set to staging
SetEnvElse host ends with dev, set to wamp

Potom som v mojom PHP dostal

<?php

if( getenv("environment") ){
exit(getenv("environment"));
}
else {
exit("environment not found");
}

A môj výstup určite je

environment not found

Vstupujem owen.jekyll-test.dev

Môže ma niekto nasmerovať smerom k tomu, čo robím zle?

odpovede:

5 pre odpoveď č. 1

Po mnohých hodinách som konečne dostal pracovné riešenie, ktoré umožňuje dynamický .htaccess založený na prostrediach

Pre všetkých, ktorí majú záujem o podobné nastavenie, je tu naša konfigurácia, ktorá automaticky spracováva príznaky SSL, WWW Redirects, Apache Auth a Is_Admin.

# ----------------------------------------------------------------------
# | Admin Vars                                                       |
# ----------------------------------------------------------------------

SetEnvIf Remote_Addr ^43.432.136.23 is_admin=1 # Virgin Media
SetEnvIf Remote_Addr ^81.43.184.70 is_admin=1   # BT
SetEnvIf Remote_Addr ^164.23.234.6 is_admin=1    # Orbtalk

SetEnv office_ip 132.39.322.23

# ----------------------------------------------------------------------
# | Environment Detection                                               |
# ----------------------------------------------------------------------

SetEnvIf environment .+ env_defined=$0
SetEnvIf environment ^(.*)$ environment=production
SetEnvIf Host ^staging. environment=staging
SetEnvIf Host .dev$ environment=dev
SetEnvIf env_defined .+ environment=$0
SetEnvIf prefix ^(.*)$ prefix=www.
SetEnvIf Host ^www !prefix

# ----------------------------------------------------------------------
# | Password Protection                                                |
# ----------------------------------------------------------------------
AuthType Basic
AuthName "Protected Login"
AuthUserFile /var/sites/website/.htpasswd

Order deny,allow
Deny from all
Satisfy any

SetEnvIf environment "dev" allow
SetEnvIf environment "production" allow

Allow from env=is_admin
Allow from env=allow
Allow from env=noauth

Require valid-user
Require user my_username

# ----------------------------------------------------------------------
# | Forcing `https://`                                                 |
# ----------------------------------------------------------------------

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP:CF-Visitor} ""scheme":"http""

RewriteCond %{ENV:environment} production

RewriteRule ^(.*)$ https://%{ENV:prefix}%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

# ----------------------------------------------------------------------
# | Forcing the `www.` at the beginning of URLs                        |
# ----------------------------------------------------------------------

#
# NOTE: IF THE WEBSITE USES SSL, YOU"LL NEED TO MODIFY THE REWRITE URL LOCATION AND MODIFY THE CONDITION
#

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP:CF-Visitor} ""scheme":"http"" [OR]

RewriteCond %{HTTP_HOST} !^www. [NC]

RewriteCond %{ENV:environment} production

RewriteRule ^ https://%{ENV:prefix}%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>