mod_rewrite: waarom werk dit plaaslik en nie aanlyn?
-
03-07-2019 - |
Vra
Ek is die ontwikkeling van 'n program wat plaaslik (onder Domain naam
Om te werk met 'n vriendelike URL's, het ek opgestel my htaccess soos volg:
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
Dit werk goed. Lastig, wanneer aanlyn gaan, is dit nie so 'n groot:
http://example.com/issue/my-slug/#23'n> terug nie AOO veranderlike. Hoekom?
Oplossing
My raaiskoot, gebaseer op vorige ondervinding is RewriteBase, waarskynlik omdat jou op 'n gedeelde bediener, of 'n ander nie-standaard opset.
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
Ander wenke
Ek kan nie sien dat
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://mydomain.eu/$1/?%{QUERY_STRING}[NC,R,L]
moet ooreenstem met die URL, maar dis die enigste een met die [R] vlag aan 'n eksterne aanstuur doen. Probeer kommentaar daardie lyn uit, om seker te maak daar is nie 'n ander deel van jou aansoek te doen die aanstuur. My raaiskoot is dat daar is.
Daar is 'n paar spasies ontbreek tussen die vervanging URL en die vlae. Jy kan ook jou eerste reël vereenvoudig soos volg:
RewriteRule ^([a-z0-9._-]+/)*[a-z0-9_-]+$ %{REQUEST_URI}/ [NC,R=301,L]