W jaki sposób systemy MVC, w których adresy URL znajdują się w tych formularzach, wymuszają wszystkie żądania w jednym pliku index.php?
http://www.example.com/foo/bar/baz
http://www.example.com/goo/car/caz/SEO-friendly-name-of-the-object
http://www.example.com/hey/you
EDYCJA: Kiedy próbuję reguł przepisywania poniżej, pojawia się ten błąd:
[error] [client 127.0.0.1] Invalid URI in request GET / HTTP/1.1
[error] [client 127.0.0.1] Invalid URI in request GET /abc HTTP/1.1
EDYCJA: Och, to jest pełna zawartość pliku /index.php. Kiedy usuwam reguły przepisywania, wypisuje „/” lub „/index.php” albo otrzymuję 404 za cokolwiek innego.
<?php
echo htmlspecialchars($_SERVER['REQUEST_URI']);
?>
ROZWIĄZANE: Dodałem / przed indeksem.php w regule przepisywania, a potem zadziałało:
ROZWIĄZANE PONOWNIE: Okazało się, że / było potrzebne tylko dlatego, że działałem 2.2.4. Kiedy uaktualniłem do 2.2.11, / nie było już potrzebne.
apache-2.2
php
mod-rewrite
mvc
jmucchiello
źródło
źródło
Odpowiedzi:
Jeśli używasz Apache, użyj przepisywania przez
mod_rewrite
:Spowoduje to przepisanie twoich adresów URL do »index.php? Q = foo / bar / baz« transparentnie.
Wiersze 2. i 3. informują silnik przepisujący, aby nie przepisał adresu URL, jeśli wskazuje na istniejący plik lub katalog. Jest to konieczne, aby mieć dostęp do prawdziwych plików udostępnianych przez serwer httpd.
źródło
Poniższy kod używa mod_rewrite Apache do przepisania wszystkich adresów URL, które nie wskazują na fizyczny plik lub katalog, który ma zostać zamapowany na index.php. Efektem końcowym będzie:
Przepisuj regułę:
Wyjaśnienie:
Oba powyższe wiersze wskazują, że ta reguła nie ma zastosowania do zwykłych plików (-f) lub katalogów (-d).
Więcej informacji na temat tworzenia reguł mod_rewrite można znaleźć na stronie internetowej Apache: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html .
źródło