2009-06-30 11 views
5

Chciałbym pracować ze stronami bez ukośnych ukośników. Teraz chcę, aby mój adres URL z końcowym ukośnikiem przekierowywał (używając .htaccess) do tego samego adresu URL bez końcowego ukośnika.Usuń końcowe ukośniki

Mam dwa pliki .htaccess:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteRule (.*) public/$1 
</IfModule> 

i jeden w moim folderze publicznym:

DirectoryIndex index.html index.php 
Options -Indexes 

<IfModule mod_rewrite.c> 
    RewriteEngine On   
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f   
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 

Próbowałem dodając następującą regułę do pliku .htaccess w folderze publicznym:

RewriteRule (.*)/$ $1 [R,L] 

Ale wtedy: przyklad.com/public/page/view/2/

przekierowuje do: example.com/**D:/webserver/**public/page/view/2

co jest oczywiście nie to, co chcę ...

+0

Nie jestem pewien, jak rozwiązać problem, ale nie jestem pewien, czy tak naprawdę powinieneś zrobić. Z mojego rozumowania wnioskuję o adres URL podobny do tego: http://www.example.com/myDir automatycznie przekierowuje użytkownika do adresu http://www.example.com/myDir/. Tego dodatkowego przekierowania można uniknąć dzięki ukośnemu ukośnikowi. To cięcie definitywnie identyfikuje, że "myDir" jest katalogiem zamiast plikiem. – nikmd23

+0

Czy mówisz, że końcowe ukośniki są częścią formalnego/standardowego/domyślnego zapisu. W takim przypadku mam podobne pytanie. Jak mogę przekierować, aby dodać ukośny ukośnik ;-) – Erik

+0

Ponieważ tak naprawdę nie próbujesz przekierować do katalogu, końcowe ukośnik nie pomaga w ogóle - w rzeczywistości nie robi nic w jedną stronę ani inny. Powinieneś po prostu iść z czymkolwiek jesteś zadowolony i być konsekwentnym w użyciu – Fake51

Odpowiedz

1

Dlaczego y masz kilka plików .htaccess? Gdzie jest przekierowanie do publicznego/$ 1? Być może stoisz w obliczu przesłonięcia dyrektyw RewriteRule, które komplikują ci sprawy.

Bez znajomości konfiguracji dość trudno jest powiedzieć, w jaki sposób powinieneś używać przeróbek - czy możesz określić, które rzeczy wyglądają RZECZYWIŚCIE?

+0

Zredukowałem to wszystko do jednego pliku .htaccess. Podczas debugowania zdałem sobie sprawę, że niektóre przeglądarki automatycznie dodawały ukośny ukośnik z powodu pewnej historii odwiedzanych stron. Czyszczenie mojej historii Internetu, dodanie rewritecond i przepisywanie zrobili lewę. – Erik

1

Czy próbowali dodanie :

RewriteBase /public 

do pliku w folderze publicznym .htaccess, aby uzyskać:

<IfModule mod_rewrite.c> 
    RewriteEngine On    
    RewriteBase /public 

    RewriteRule (.*)/$ $1 [R,L] 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f   
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 
+0

Po prostu próbowałeś, ale to nie przekieruje. – Erik

+0

Czy masz na myśli, że przekierowuje bez tej linii, ale nie przekierowuje z nią? Z twojego pytania nie wynika też, w jaki sposób umieścić "RewriteRule (. *)/$ 1 [R, L]" w pliku ".htaccess". –

+0

Po otrzymaniu kodu otrzymam następujące wyniki: przyklad.com/page/view/1 >> 404 błąd przyklad.com/page/view/1/ >> Przekierowania do example.com/public/page/ view/1 i wyświetla komunikat 404 – Erik

1

Oto przykład z dokumentacji Apache, które można użyć, aby rozwiązać swój problem:

końcowy ukośnik Problem

Opis:

Każdy webmaster może śpiewać piosenkę o problemie końcowy ukośnik na URL-ach odnoszących się do katalogów. Jeśli ich nie ma, serwer zrzuca błąd, ponieważ jeśli powiemy/~ quux/foo zamiast/~ quux/foo /, serwer wyszuka plik o nazwie foo. A ponieważ ten plik jest katalogiem, na który się skarży. Właściwie to próbuje naprawić to samo w większości przypadków, ale czasami ten mechanizm musi być emulowany przez ciebie. Na przykład po wykonaniu wielu skomplikowanych rewritings URL do skryptów CGI itp

Rozwiązanie:

Rozwiązaniem tego problemu jest subtelny niech serwer dodać ukośnik automatycznie. Aby to zrobić poprawnie, musimy użyć zewnętrznego przekierowania, aby przeglądarka poprawnie żądała kolejnych obrazów itp. Gdybyśmy tylko napisali wewnętrzną wersję, działałoby to tylko dla strony katalogu, ale byłoby źle, gdyby jakiekolwiek obrazy były zawarte na tej stronie z względnymi adresami URL, ponieważ przeglądarka zażąda obiektu w linii. Na przykład żądanie dla image.gif w /~quux/foo/index.html stanie się /~quux/image.gif bez zewnętrznego przekierowania!

Tak więc, aby zrobić ten trick piszemy:

RewriteEngine on 
RewriteBase /~quux/ 
RewriteRule ^foo$ foo/ [R] 

szalony i leniwi mogą nawet wykonać następujące czynności w najwyższego poziomu pliku .htaccess ich homedir. Ale zauważ, że to powoduje pewne obciążenie przetwarzania.

RewriteEngine on 
RewriteBase /~quux/ 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+[^/])$ $1/ [R] 

Source

2

Wordpress przekierowania w zależności od struktury permalink jest. Więc wszelkie zmiany w .htaccess niewiele pomagają, ponieważ Wordpress doda/usunie je dla ciebie i stworzy plik wp_redirect() po .htaccess. W najgorszym przypadku otrzymasz pętlę przekierowania.

Rozwiązaniem jest wyłączenie przekierowania Wordpressa przy użyciu.

// perhaps an if(is_something()) before here ... 
add_filter('redirect_canonical', '__return_false'); 

Powinieneś zawinąć to wewnątrz instrukcji if lub takich, w których przeprowadzasz kontrolę dla określonej strony/katalogu/etc. Umieszczenie powyższego bezpośrednio w pliku funkcji spowoduje wyłączenie przekierowań słów i prawdopodobnie je zepsuje.

+0

Idealny. Dzięki! –

Powiązane problemy