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?
2 odpowiedzi
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]
Jeśli URL z / index.php
zostanie wykonany
Naprawione błędy: RewriteRule ^([a-z][a-z])/(.*)$ xyz/$2/index.php?first-dir=$1 [L]
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.