Tu jest mój plik .htaccess:.htaccess - przerwij przetwarzanie, jeśli przepisanie jest prawdziwe?
Options +FollowSymlinks
RewriteEngine on
Rewritecond %{http_host} ^mysite.com [nc]
Rewriterule ^(.*)$ http://www.mysite.com/$1 [r=301,nc]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /404.php
The 1st bloku RewriteCond/RewriteRule jest przekierowanie użytkownika do www gdyby weszli adres bez www.
The 2nd blok RewriteCond/RewriteRule jest przekierowanie użytkownika na stronie, który został utworzony, jeśli wejdą do nieistniejącego adresu.
Każda z tych reguł działa na własną rękę:
Jeśli mój plik .htaccess zawiera tylko pierwszy blok, to z powodzeniem przekierowywane zakaz adresy www pod adresem www.
A jeśli nieistniejący adres jest wpisany, użytkownik zostanie pomyślnie przekierowany do mojego widoku 404.php.
Jednakże, jeśli plik .htaccess zawiera zarówno bloków, a nie adres www zostanie wprowadzony, wówczas zamiast udanej przekierowania na adres www, dodaje się dzieje:
(1) Poniżej wyświetlane na stronie:
przeniesiony na stałe
dokument został przeniesiony tutaj.
Dodatkowo, błąd Błąd 500 Internal Server napotkano podczas próby korzystania z ErrorDocument obsłużyć żądania.
Apache/1.3.41 Server w mysite.com port 80
(2) Poniższy wpis jest generowany w dzienniku błędów:
[Pią 4 maja 2012 01:54:19 [Błąd] ] [klient 109.109.109.109] mod_rewrite: maksymalna liczba wewnętrznych przekierowań osiągnięta. Zakładając błąd konfiguracji. Użyj "RewriteOptions MaxRedirects", aby zwiększyć limit, jeśli jest to konieczne.
Przypuszczam, że to, co się dzieje, że nieskończona pętla jest w jakiś sposób jest generowany.
Zastanawiam się, czy mówienie plik .htaccess, aby zatrzymać przetwarzanie poleceń, jeśli pierwszy warunek został spełniony rozwiązałoby problem. Czy ktoś wie, jak to zrobić?
(uwaga Side. W ogóle uważam, że dokumentację tam na .htaccess być absolutnie przerażające. Zastanawiam się, czy ktoś czuje podobnie.)
Z góry dzięki.
wziąłem twojej rady, więc jedyną zmianą do mojego pliku jest to, że najpierw przepisać rule ma następującą postać: 'Rewriterule^(. *) $ http://www.mysite.com/$1 [r = 301, nc, L]' I teraz wszystko działa poprawnie. Dziękuję. – oyvey
Nie ma potrzeby ponownej iteracji witryny. A: Apache RewriteRules są domyślnie chciwe. ☞ 'RewriteRule (. *) $ 1 [R = 404, L]' –