2009-04-07 9 views
5

/foo/.htaccess robi wewnętrzne przekierowanieJak to działa? RewriteCond% {ENV: unique_id}!% {QUERY_STRING}

RewriteRule ^(.*)$ /bar/?%{ENV:UNIQUE_ID} 

/bar/.htaccess musi uznać, że wniosek nie był wewnętrzny, problem jest taki, że nie może dowiedzieć się, jak uczynić pracę porównania

RewriteCond %{ENV:UNIQUE_ID} !%{QUERY_STRING} 

nawet

RewriteCond %{QUERY_STRING} %{QUERY_STRING} 

nie będzie pasował, przypuszczam, że jest to kwestia składni w umer prawej f wyrażenie, unikanie% nie pomaga.

Testowałem że powyższe zarówno zmiennej mają taką samą wartość będzie to pokazać na wewnętrznym przekierowaniem jako

RewriteRule ^(.*)$ /test/%{QUERY_STRING}/%{ENV:UNIQUE_ID} 

.

Serwer Apache/2.2.3

Dzięki Laurian

Odpowiedz

15

Niestety nie można porównać dwie zmienne bezpośrednio z mod_rewrite. (A przynajmniej ja nie wiem jak to zrobić, albo.)

Ale istnieje obejście tego:

RewriteCond %{ENV:UNIQUE_ID}:%{QUERY_STRING} !^(.+):\1$ 

Wybrałem : jako separatora ale można użyć dowolnego innego separatora jeśli ciebie chcieć. A jeśli możesz określić strukturę wartości UNIQUE_ID, powinieneś to zrobić.

+1

Jest to przydatne! Nie zdawałem sobie sprawy, że można połączyć wiele takich wartości środowiskowych. –

+0

Rzeczywiście jest to konieczne, aby poznać sztuczkę !! Dzięki! – greydet

0

Jeśli strona odsyłająca nie była tą samą domeną, w której się znajdujesz, na przykład po raz pierwszy osoba odwiedzająca, ale nie korzystała z linku w obrębie własnej witryny internetowej, można sprawdzić HTTP_REFERRER. Tę samą technikę stosuje się, aby zapobiec tworzeniu linków do obrazów.