/ / Przepisywanie URL zwraca 500 wewnętrznych błędów serwera - php, apache, .htaccess, mod-rewrite

Przepisywanie URL zwraca 500 wewnętrznych błędów serwera - php, apache, .htaccess, mod-rewrite

Próbuję to przekonwertować:

site/read.php?id=6

do

site/read/6

Wypróbowałem kilka rozwiązań znalezionych na SO, z których ostatnim jest (do wyjścia: site/read/id/6): RewriteRule ^(.*?.php)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N,QSA]

Gdy spróbuję drugiego łącza, zawiesi się i nastąpi awaria apache (LOL).

Nie jestem pewien, czy ma problem z resztą pliku .htaccess, więc oto pełny kod:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^(.*?.php)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N,QSA]

Mogłem osiągnąć (z wierszami 1-4), że nie wyświetlają się żadne rozszerzenia php, więc pasek adresu aktualnie czyta site/read?id=6

Czy możesz mi wskazać, gdzie poszedłem źle?

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz umieścić ten kod w swoim htaccess (który musi znajdować się w folderze głównym)

Options -MultiViews
RewriteEngine On

RewriteCond %{THE_REQUEST} s/read.php?id=([0-9]+)s [NC]
RewriteRule . /read/%1? [R=301,L]

RewriteRule ^read/([0-9]+)$ /read.php?id=$1 [L]

-1 dla odpowiedzi № 2

Zrobiłbym to w PHP, bardzo trudnodebugować, co robi Apache, może to oznaczać, że przechodzi w nieokreśloną pętlę, czy znalazłeś coś w plikach dziennika apache? Ale oszczędzaj sobie kłopotów i rób to w PHP, jeśli używasz Framework, łatwo jest uruchomić jeden PHP, który to sprawdza i przekierowuje na nową stronę, jeśli wykryje .php w adresie URL.