it-swarm.com.de

Das Umschreiben der URL funktioniert nicht in wamp localhost

Ich entwickle eine PHP Webanwendung. Ich habe Seiten, Beiträge, Kategorien, Produkte usw.

Hier ist meine .htaccess Datei, um eine SEO-freundliche URL zu erstellen:

Options -Indexes
RewriteEngine on
RewriteRule ^Page/(.*)/(.*)$ Page.php?Page_Id=$1&Page_Title=$2 [NC,L]
RewriteRule ^Product/(.*)/(.*)$ Product.php?Product_Id=$1&Product_Title=$2 [NC,L]
RewriteRule ^Category/(.*)/(.*)$ Category.php?Category_Id=$1&Category_Title=$2 [NC,L]
RewriteRule ^Single/(.*)/(.*)$ Single.php?Post_Id=$1&Post_Title=$2 [NC,L]
RewriteRule ^Blog/(.*)/(.*)$ Blog.php?Category_Id=$1&Category_Title=$2 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]


<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
    Order Allow,Deny
    Deny from all
</FilesMatch>
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 year"
</IfModule>

Wenn ich Page.php?Page_Id=13 besuche, funktioniert es. Und auch wenn ich Page/13/Page-Title besuche, funktioniert es. Alles ist gut, wenn ich meine Anwendung auf dem Server teste, aber es funktioniert nicht in wamp localhost.

Ich bin aktiv

LoadModule rewrite_module modules/mod_rewrite.so

in Apache http.conf und hier ist mein vhost:

    <VirtualHost *:8080>
    ServerName localhost
    DocumentRoot c:/wamp64/www
    <Directory  "c:/wamp64/www/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>


<VirtualHost *:8080>
    ServerName schoolarshop
    DocumentRoot "c:/wamp64/www/schoolarshop"
    <Directory  "c:/wamp64/www/schoolarshop/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride none
        Require local
    </Directory>
</VirtualHost>

Ein Beispiel für einen Fehler in localhost ist:

Notice: Undefined index: Page_Id in Page.php on line 8

Warum funktioniert es auf dem Server und nicht in localhost?

Ich habe viel gegoogelt, aber es kann nichts finden.

2
Mohammadreza
Options +Indexes +Includes +FollowSymLinks +MultiViews

Warum aktivieren Sie MultiViews explizit in Ihrer Serverkonfiguration? Dies ist wahrscheinlich die Ursache für Ihr Problem. Entfernen Sie +MultiViews aus Ihrer Serverkonfiguration (oben) und/oder deaktivieren Sie MultiViews oben in Ihrem .htaccess:

 Options -Indexes -MultiViews

Bei einer Apache-Standardinstallation ist MutliViews deaktiviert. Einige (gemeinsam genutzte) Hosts scheinen es jedoch zu aktivieren. Daher wird wahrscheinlich empfohlen, es in .htaccess zu deaktivieren.

(Aber auch, warum aktivieren Sie Includes - ist dies wirklich notwendig? Da Sie PHP verwenden, ist dies unwahrscheinlich.)

Die Wirkung von MultiViews ist spürbar, da Sie die Dateierweiterung effektiv entfernt haben, um Ihre benutzerfreundlichen URLs zu erstellen.

Mit aktivierten MultiViews (Teil von mod_negotiation) ... versucht Apache beim Anfordern von Page/13/Page-Title, eine passende Datei im aktuellen/root-Verzeichnis zu finden, die dem Basisnamen Page entspricht, indem verschiedene zurückgegebene Erweiterungen verwendet werden den passenden MIME-Typ. Dies geschieht bevor mod_rewrite in der Lage ist, Ihre freundliche URL umzuschreiben. Daher schreibt MultiViews Ihre Anfrage an Page.php um, ohne einen der URL-Parameter zu übergeben (der Rest der URL wird wahrscheinlich als PATH_INFO angezeigt), daher Ihr Hinweis "Undefinierter Index" PHP.

(Obwohl Sie auch in Ihrem PHP - Skript nach der Existenz dieser $_GET -Variable suchen sollten, was Sie anscheinend nicht tun.)

2
MrWhite