Tworzę stronę internetową za pomocą php.
I chcę użyć nazwy pierwszego katalogu adresu URL jako parametru dla php.

Mam następującą regułę przepisywania:

RewriteRule ^([a-z][a-z])/(.*)$ xyz/$2?first-dir=$1 [L]

Kiedy uzyskam dostęp do http://example.com/aa/b/,
/xyz/b/index.php jest wykonywany z parametrem first-dir=aa.
A URL w pasku adresu przeglądarki to http://example.com/aa/b/ (tak samo jak URL wejściowy).

Ale kiedy mam dostęp do http://example.com/aa/b (bez śledzenia /),
URL w pasku adresu to http://example.com/xyz/b/?first-dir=aa.
Nie chcę pokazywać użytkownikom tego przepisanego adresu URL.

Dlaczego tak się dzieje?
Jak rozwiązać ten problem?

0
js_ 28 wrzesień 2012, 19:52

2 odpowiedzi

Najlepsza odpowiedź

To jest mod_dir i DirectorySlash zakłócające Twój identyfikator URI. Gdy Apache zobaczy, że Twój URI wskazuje na katalog, ale brakuje ukośnika, 301 przekieruje klienta do tego samego URI z ukośnikiem. Twoja reguła jest stosowana, mod_dir widzi, że /aa/b jest katalogiem, więc przekierowuje przeglądarkę do /aa/b/. Musisz tylko sprawdzić, czy w regule nie ma końcowego ukośnika:

RewriteRule ^([a-z][a-z])/(.*?)/?$ xyz/$2/?first-dir=$1 [L]
1
Jon Lin 29 wrzesień 2012, 22:19

Jeśli URL z / index.php zostanie wykonany

Naprawione błędy: RewriteRule ^([a-z][a-z])/(.*)$ xyz/$2/index.php?first-dir=$1 [L]

0
HanhNghien 28 wrzesień 2012, 20:31