Mam zdefiniowany plik .htaccess na moją stronę internetową mającą ten kod:Jak zdefiniować zmienną w pliku .htaccess i używać jej?
RewriteEngine on
RewriteBase/
RewriteRule ^bit_auth\/?(.*)$ /cig/base3/auth/$1 [R=301,NC,L]
RewriteCond $1 !^(index\.php|images|robots\.txt|assets|themes|includes)
RewriteRule ^(.*)$ /cig/base3/index.php/$1 [L]
Chcę zachowywał moją ścieżkę katalogu głównego witryny w zmiennej jak ten:
RewriteEngine on
RewriteBase/
SetEnv BASE_PATH "/cig/base3"
RewriteRule ^bit_auth\/?(.*)$ %{ENV:BASE_PATH}/auth/$1 [R=301,NC,L]
RewriteCond $1 !^(index\.php|images|robots\.txt|assets|themes|includes)
RewriteRule ^(.*)$ %{ENV:BASE_PATH}/index.php/$1 [L]
ponieważ może muszę Użyj wartości BASE_PATH
w kolejnych kodach później, a także może zostać zmieniona i nie chcę wyszukiwać i zastępować za każdym razem w moim pliku htaccess. Ale kiedy użyć kodu powyżej, w pliku .htaccess %{ENV:BASE_PATH}
zwraca pustą wartość niż oczekiwano /cig/base3
ale w php, gdy nazywam go za pomocą:
<?php $specialPath = getenv('BASE_PATH'); var_dump($specialPath)?>
to pokazuje prawidłową wartość /cig/base3
.
Jaki jest problem w moich kodach i jak mogę to rozwiązać?
Jest dziwactwo w kolejności, w której ładunki Apache/uruchamia moduły - mod_rewrite zawsze działa przed SetEnv, więc nie możesz użyć SetEnv do ustawienia zmiennej środowiskowej, której chcesz użyć w RewriteRiule; jednak ** możesz ** ustawić zmienną za pomocą RewriteRule; na przykład 'RewriteRule. * - [E = BASE_PATH:/cig/base3]' – CD001
@ CD001 Nie bardzo rozumiem, dlaczego powinienem używać tego w ten sposób, ale kiedy wstawiłem twój kod do pliku htaccess, działa on zgodnie z oczekiwaniami. czy masz jakieś odniesienia do więcej opisu/szczegółów, a także przykłady dla doświadczonych użytkowników? lub opisz to jeszcze bardziej. –