Tak, przeczytałem instrukcję Apache i szukałem tutaj. Z jakiegoś powodu po prostu nie mogę tego uruchomić. Najbliższym osiągnięciem jest usunięcie rozszerzenia, ale wskazuje ono z powrotem na katalog główny. Chcę, żeby to działało w katalogu zawierającym .htaccess
plik.
Muszę zrobić trzy rzeczy z .htaccess
plikiem.
Potrzebuję go, aby usunąć plik .php
za. Mam kilka stron, które używają zakładek, a adres URL wygląda jak page.php # tab - czy to możliwe?
b. Mam jedną stronę, która używa identyfikatora sesji dołączany do adresu URL, aby upewnić się, że pochodzi z właściwym miejscu
www.domain.com/download-software.php?abcdefg
.
czy to możliwe? Czy robiąc to, muszę usunąć „.php” z linków w moim pliku nagłówkowym nav? PowinienIE "<a href="support.php">support</a>" be <a href="support">support</a>?
- Chciałbym, aby wymuszał „www” przed każdym adresem URL, więc nie jest
domain.com
, alewww.domain.com/page
. - Chciałbym usunąć wszystkie końcowe ukośniki ze stron.
Będę dalej szukać, próbować itp. Czy przebywanie w podkatalogu spowoduje jakieś problemy?
Odpowiedzi:
Odpowiedź Gumbo w pytaniu Stack Overflow Jak ukryć rozszerzenie .html za pomocą Apache mod_rewrite powinna działać dobrze.
Ad 1) Zmień .html na .php
Re a.) Tak, to możliwe, po prostu dodaj
#tab
do adresu URL.Ad b.) Jest to możliwe przy użyciu
QSA
(Query String Append), patrz poniżej.To powinno też działać w ścieżce sub-directory:
źródło
[L,
spacjiQSA]
, w przeciwnym razie spowoduje to wewnętrzny błąd 500 serwera ./index/bla/bla
to samo coindex.php
Apache mod_rewrite
To czego szukasz to mod_rewrite ,
Ogólnie rzecz biorąc,
mod_rewrite
działa dopasowując żądany dokument do określonych wyrażeń regularnych, a następnie wykonuje przepisywanie adresu URL wewnętrznie (w ramach procesu apache) lub zewnętrznie (w przeglądarce klienta). Te przepisy mogą być tak proste, jak wewnętrzne przetłumaczenie example.com/foo na żądanie na przykład.com/foo/bar.Dokumentacja Apache zawiera
mod_rewrite
przewodnik i myślę, że niektóre z rzeczy, które chcesz zrobić, są w nim zawarte. Szczegółowy przewodnik po mod_rewrite .Wymuś
www
subdomenęPrzewodnik po przepisywaniu zawiera instrukcje dotyczące tego w przykładzie nazwy hosta kanonicznego .
Usuń końcowe ukośniki (część 1)
Nie jestem pewien, dlaczego chcesz to zrobić, ponieważ przewodnik po przepisywaniu zawiera przykład dokładnie odwrotny , tj. Zawsze zawiera kończący ukośnik. Dokumenty sugerują, że usunięcie końcowego ukośnika może powodować problemy:
Być może mógłbyś rozwinąć, dlaczego chcesz cały czas usuwać końcowy ukośnik?
Usuń
.php
rozszerzenieNajbliższą rzeczą, o której mogę pomyśleć, jest wewnętrzne przepisanie każdego dokumentu żądania z rozszerzeniem .php, tj. Przykład.com/somepage jest zamiast tego przetwarzany jako żądanie na przykład przyklad.com/somepage.php. Zauważ, że postępowanie w ten sposób wymagałoby, aby każda strona faktycznie istniała jako strona.php w systemie plików.
Przy odpowiedniej kombinacji wyrażeń regularnych powinno to być do pewnego stopnia możliwe. Mogę jednak przewidzieć pewne możliwe problemy związane z nieprawidłowym żądaniem stron indeksu i nieprawidłowym dopasowaniem katalogów.
Na przykład spowoduje to poprawne przepisanie example.com/test jako żądania na przykład.com/test.php:
Ale spowoduje, że example.com się nie załaduje, ponieważ nie ma example.com/.php
Zgaduję, że jeśli usuniesz wszystkie końcowe ukośniki, to wybranie żądania indeksu katalogu z żądania nazwy pliku w katalogu nadrzędnym stanie się prawie niemożliwe. Jak określić żądanie katalogu „foobar”:
z żądania pliku o nazwie foobar (który w rzeczywistości jest foobar.php)
Byłoby to możliwe, gdybyś użył
RewriteBase
dyrektywy. Ale jeśli to zrobisz, problem stanie się znacznie bardziej skomplikowany, ponieważ będziesz wymagaćRewriteCond
dyrektyw do sprawdzania na poziomie systemu plików, czy żądanie jest mapowane do katalogu lub pliku.To powiedziawszy, jeśli usuniesz wymóg usunięcia wszystkich końcowych ukośników i zamiast tego wymuś dodawanie końcowych ukośników, problem „bez rozszerzenia .php” stanie się nieco bardziej rozsądny.
To nadal nie jest idealne - każde żądanie dotyczące pliku nadal ma wewnętrznie dołączany plik .php. Żądanie „hi.txt” spowoduje umieszczenie tego w dziennikach błędów:
Ale jest inna opcja, ustaw dyrektywy
DefaultType
i wDirectoryIndex
ten sposób:Aktualizacja 2013-11-14 - Poprawiono powyższy fragment, aby zawierał obserwację Nicorelliusa
Teraz prośby o plik hi.txt (i wszystko inne) są pomyślne, żądania do example.com/test zwrócą przetworzoną wersję test.php, a pliki index.php będą działać ponownie.
Muszę podać kredyt za to rozwiązanie, ponieważ znalazłem go na blogu Michaela J. Radwinsa , wyszukując w Google hasło php no extension apache .
Usuń końcowe ukośniki
Niektóre wyszukiwania
apache remove trailing slashes
doprowadziły mnie do niektórych stron optymalizacji witryn pod kątem wyszukiwarek. Najwyraźniej niektóre systemy zarządzania treścią (w tym przypadku Drupal) udostępnią treść z końcowym ukośnikiem w adresach URls i bez niego, co w świecie SEO spowoduje, że Twoja witryna będzie ponosić karę za powielenie treści. ŹródłoRozwiązanie wydaje się dość trywialne, używając
mod_rewrite
przepisywania pod warunkiem, że żądany zasób kończy się na a/
i przepisywania adresu URL przez odesłanie301 Permanent Redirect
nagłówka HTTP.Oto jego przykład, który zakłada, że Twoja domena to blamcast.net i pozwala na opcjonalne poprzedzenie żądania przedrostkiem
www.
.Teraz dokądś zmierzamy. Połączmy to wszystko razem i zobaczmy, jak to wygląda.
Obowiązkowe
www.
, nie.php
i bez końcowych ukośnikówZakłada się, że domena to foobar.com i działa na standardowym porcie 80.
Flaga „R” jest opisana w
RewriteRule
sekcji dyrektywy. Skrawek:Uwaga końcowa
Nie udało mi się doprowadzić do pomyślnego usunięcia ukośnika. Przekierowanie dało mi nieskończone pętle przekierowań. Po bliższym przeczytaniu oryginalnego rozwiązania mam wrażenie, że powyższy przykład działa u nich z powodu konfiguracji ich instalacji Drupala. Wspomina konkretnie:
W odniesieniu do adresów URL kończących się ukośnikiem i bez. Ponadto,
źródło
DirectoryIndex index index.html
? czyDirectoryIndex index.php index.html
?Oprócz innych odpowiedzi powyżej,
Możesz także spróbować całkowicie usunąć rozszerzenia .php z pliku i uniknąć nieskończonej pętli :
Ten kod będzie działał w Root / .htaccess, pamiętaj, aby zmienić RewriteBase, jeśli chcesz umieścić to w pliku htaccess w podkatalogu.
Edytować :
W Apache 2.4 i nowszych możesz również użyć flagi END, aby zapobiec błędowi nieskończonej pętli. Poniższy przykład działa tak samo jak powyżej na Apache 2.4,
źródło
Poniższy kod działa dobrze dla mnie:
źródło
Oto metoda, jeśli chcesz to zrobić tylko dla jednego konkretnego pliku:
Ref: http://css-tricks.com/snippets/htaccess/remove-file-extention-from-urls/
źródło
Po zmianie parametru
AllowOverride
odNone
doAll
w/etc/apache2/apache2.conf
(Debian 8), po to , plik .htaccess tylko musi zawierać:I wystarczyło ukryć rozszerzenie .php z plików
źródło
MultiViews
robi się to po wyjęciu z pudełka<a href="somepage.php">
linku</a>
na<a href="somepage">
link</a>
w kodzie źródłowymSpróbuj tego
Poniższy kod na pewno zadziała
źródło
Nie wiem, dlaczego inne odpowiedzi nie zadziałały, ale ten kod, który znalazłem, zadziałał:
To wszystko, co jest w moim htaccess, a example.com/page pokazuje example.com/page.php
źródło
Aby usunąć rozszerzenie .php z pliku PHP, na przykład twoja_witryna.com/about.php do twoja_witryna.com/about Wykonaj poniższe czynności. Otwórz plik .htaccess (utwórz nowy, jeśli nie istnieje) z katalogu głównego swojej witryny i dodaj następujący kod.
Aby usunąć rozszerzenie .html z pliku html, na przykład twoja_witryna.com/about.html do twoja_witryna.com/about Wykonaj poniższe czynności.
Otwórz plik .htaccess (utwórz nowy, jeśli nie istnieje) z katalogu głównego swojej witryny i dodaj następujący kod.
Odniesienie: Jak usunąć rozszerzenie php z adresu URL
źródło
Jeśli kodujesz w PHP i chcesz usunąć .php, aby mieć adres URL taki jak:
http://twojadomena.com/blah -> co wskazuje na /blah.php
To wszystko, czego potrzebujesz:
źródło
Znalazłem dla mnie 100% działającą koncepcję:
Użyj tego kodu w głównym pliku .htaccess swojej witryny, na przykład:
offline - wamp \ www \ YourWebDir
online - public_html /
źródło
RewriteRule
znakówL
obok siebie.[L]
mówimod_rewrite
, że jest to ostatnia reguła dla określonegoRewriteCond
.Oto kod, którego użyłem, aby ukryć
.php
rozszerzenie przed nazwą pliku:Uwaga:
R=301
służy do stałego przekierowania i jest zalecany do celów SEO. Jeśli jednak chcesz tylko tymczasowego przekierowania, zamień je na justR
źródło
Skończyłem z następującym działającym kodem:
źródło
Jeśli adres URL w PHP jak http://yourdomain.com/demo.php niż przychodzi jak http://yourdomain.com/demo
To wszystko, czego potrzebujesz:
utwórz plik .htaccess
źródło
http://example.com/myfile
ale nie działało w przypadkuhttp://example.com/myfolder/
(plik indeksu). Czy możesz mi pomóc, aby działał dla pliku indeksu?Próbować
źródło