rewriteengine on
rewriterule ^/a/b$ ^/c$
nie działa, aleCo jest nie tak z moim RewriteRule przez .htaccess? (Dlaczego trzeba RewriteBase?)
rewriteengine on
rewritebase/
rewriterule ^a/b$ ^c$
prace.
rewriteengine on
rewriterule ^/a/b$ ^/c$
nie działa, aleCo jest nie tak z moim RewriteRule przez .htaccess? (Dlaczego trzeba RewriteBase?)
rewriteengine on
rewritebase/
rewriterule ^a/b$ ^c$
prace.
Jakiej wersji Apache używasz? RewriteBase
nie powinno być konieczne, gdy przepisujesz z katalogu głównego. Jeśli nie, możesz go potrzebować. Na przykład, część moich obecnych konfiguracjach (Apache 2.2) dla jednego z moich blogów wygląda następująco, i działa:
RewriteEngine On
RewriteRule ^/$ /blog/ [R]
RewriteRule ^/wordpress/(.*) /blog/$1 [R]
To nie jest chyba RewriteBase który sprawia, że praca reguły tyle jako wiodący ukośnik. Drugi argument do RewriteRule nie jest wyrażeniem regularnym. Zamiast tego, spróbuj:
RewriteRule ^/?a/b$ c
Podczas stosowania RewriteRule z .htaccess, wiodący ukośnik będą usuwane z zawartości, co spowoduje, że wzór na niepowodzenie, jeśli zawierają go. Rozpoczynając wzorzec za pomocą "^ /?", Będzie działać w głównych plikach konfiguracyjnych oraz w plikach konfiguracyjnych per-directory.
Zapoznaj się z detailed mod_rewrite documentation, aby dowiedzieć się, jak działa silnik przebudowy i znaczenie RewriteBase.
Edit: Jak wspomniano w mod_rewrite technical details i opisane w dokumentacji dla RewriteRule i RewriteBase URL został przetłumaczony na ścieżkę do czasu zasady per-katalogu przepisujące są oceniane. Mechanizm przepisywania nie ma już adresu URL do pracy. Zamiast tego usuwa prefiks katalogu lokalnego (katalog zawierający plik .htaccess), który kończy się ukośnikiem. Załóżmy na przykład, że użytkownik żąda "/var/www/foo/bar/baz.html" i jest ustawiona reguła przepisywania w "/var/www/foo/.htaccess". Przed każdą regułą, silnik do przepisywania będzie usuwał "/ var/www/foo /", pozostawiając "bar/baz.html" do dopasowania do reguły przepisywania. Po przetworzeniu reguły prefiks katalogu lokalnego jest poprzedzony (chyba że zamiennik zaczyna się od "http: //"). Po przetworzeniu wszystkich reguł przepisywania, baza do przepisywania, jeśli jest ustawiona, zastępuje prefiks katalogu lokalnego; jeśli nie, główny katalog dokumentu jest usuwany. Odtworzony adres URL jest następnie ponownie wprowadzany jako żądanie podrzędne.
Czy możesz wyjaśnić, dlaczego wiodący slash jest usunięty po zastosowaniu z '.htaccess'? – user198729
@ unknown - to jest dobre pytanie. Jeśli nie chcesz nikogo tu ugryźć, możesz spróbować przenieść go na serverfault.com. Zachęcam również do zaakceptowania odpowiedzi na więcej pytań, a nawet odpowiedzi na kilka pytań po drodze ... –