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 № 1Moż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.