mod_rewrite: perché funziona localmente e non online?
-
03-07-2019 - |
Domanda
Sto sviluppando un'app localmente (sotto Nome dominio < miodominio > .dev ).
Per lavorare con URL amichevoli, ho impostato il mio .htaccess in questo modo:
RewriteEngine on
# Externally redirect to add missing trailing slash
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://example.com/$1/?%{QUERY_STRING}[NC,R,L]
RewriteRule ^about/$ about.php [NC,L]
RewriteRule ^issues/$ issues.php [NC,L]
RewriteRule ^issue/([a-z0-9_\-]+)/$ issue.php?slug=$1 [NC,L]
SetEnv PHP_VER 5
IndexIgnore *
Options +FollowSymLinks
Funziona bene. Stranamente, quando vai online, non è così eccezionale:
http://example.com/issue/my-slug/#23 non restituisce alcuna variabile GET. Perché?
Soluzione
La mia ipotesi, basata sull'esperienza passata è RewriteBase, probabilmente perché sei su un server condiviso o su qualche altra configurazione non standard.
RewriteEngine on
#Set base as doc root.
RewriteBase /
# Externally redirect to add missing trailing slash
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://mydomain.eu/$1/?%{QUERY_STRING}[NC,R,L]
RewriteRule ^about/$ about.php [NC,L]
RewriteRule ^issues/$ issues.php [NC,L]
RewriteRule ^issue/([a-z0-9_\-]+)/$ issue.php?slug=$1 [NC,L]
SetEnv PHP_VER 5
IndexIgnore *
Options +FollowSymLinks
Altri suggerimenti
Non lo vedo
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://mydomain.eu/$1/?%{QUERY_STRING}[NC,R,L]
deve corrispondere a tale URL, ma è l'unico con il flag [R] a eseguire un reindirizzamento esterno. Prova a commentare quella riga, per assicurarti che non vi sia un'altra parte dell'applicazione che esegue il reindirizzamento. La mia ipotesi è che ci sia.
Manca uno spazio tra l'URL di sostituzione e i flag. Puoi anche semplificare la tua prima regola come segue:
RewriteRule ^([a-z0-9._-]+/)*[a-z0-9_-]+$ %{REQUEST_URI}/ [NC,R=301,L]