3 Stimmen

Umschreiben in einen relativen Pfad im Apache2 unter Mac OS X Lion (10.7)

Ich habe die Website gründlich durchsucht und auch nach diesem Thema gegoogelt, aber ohne Erfolg. Ich verwende Apache2 + PHP auf meinem Mac OS X. Ich habe nicht viel an der Konfiguration geändert, nur so viel, dass alles korrekt funktioniert. Hier ist mein .htaccess Datei:

<IfModule mod_rewrite.c>

Options +FollowSymLinks
Options +Indexes

RewriteBase /~milad/mysite/

RewriteEngine On

RewriteRule ^$ index.php?:url [L,QSA] #Handling tail with no parameters

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?)$ index.php?:url=$1 [L,QSA]

</IfModule>

Dies funktioniert problemlos für alle Dateien, die sich unter http://localhost/~milad/mysite/* . Aber ich möchte meine .htaccess Datei unabhängig von den Besonderheiten meiner Installation zu erstellen, d.h. ich möchte nicht die RewriteBase ... Zeile in meinem Code.

Aber wenn ich diese Zeile entferne, versucht der Apache, sie auf eine URL abzubilden, was ich nicht verstehe. Was ich bekomme ist:

Nicht gefunden

Die angeforderte URL /Users/milad/Sites/newave/index.php wurde auf diesem Server nicht gefunden.

was einfach lächerlich ist, weil die index.php Datei ist NUR der Ort, auf den dieser URI verweist. Wie auch immer, wenn ich versuche, nach /index.php 代わりに index.php stelle ich fest, dass sie umgeschrieben wird in http://localhost/index.php . Wie kommt es also, dass ich nicht nur den relativen Pfad verwenden kann, oder nur die ./index.php (Ja, das habe ich auch schon versucht).

Jeder Einblick wäre sehr willkommen.

4voto

Olivier Pons Punkte 14714

Das Problem liegt in Ihrer vhost-Konfiguration:

Not Found
The requested URL /Users/milad/Sites/newave/index.php was not found on this server.

Bedeutet eindeutig: "die Basis Ihrer Website ist /Users/milad/Sites/newave/ ". Wenn Sie also wollen, dass die Basis für Ihre Website ist /~milad/mysite/ versuchen, das DocumentRoot zu ändern

<VirtualHost *>
    ServerName mysite.com
    DocumentRoot "/~milad/mysite/"

</VirtualHost>

Natürlich müssen sich alle Dateien Ihrer Website im Ordner " /~milad/mysite/ ".

Dann in Ihrer htaccess-Datei (beachten Sie, dass ^(.*?)$ ist gleichbedeutend mit *`(.)** und ich verstehe nicht, warum Sie dieRewriteRule ^$` weil es am Ende richtig behandelt werden sollte):

Options +FollowSymLinks
Options +Indexes

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?:url=$1 [L,QSA]

Bitte sagen Sie mir, ob es funktioniert


Edit: Nach den Kommentaren, hier ist eine vhost-Datei, die bei mir funktioniert:

<VirtualHost *>
    DocumentRoot "/web/htdocs/olivier/wwog"
    ServerName wwog.fr
    ServerAlias *.wwog.fr

    ErrorLog "/web/logs/wwog.error.log"
    CustomLog "|/opt/httpd/bin/rotatelogs /web/logs/wwog/access.%Y-%m-%d-%H_%M_%S.log 5M" combined

    DirectoryIndex index.php index.htm

    <Location />
        # Compression:
        # (http://httpd.apache.org/docs/2.0/mod/mod_deflate.html)
        # Insert filter
        AddOutputFilterByType DEFLATE text/html text/plain
        SetOutputFilter DEFLATE

        # Netscape 4.x has some problems...
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        # Netscape 4.06-4.08 have some more problems
        BrowserMatch ^Mozilla/4\.0[678] no-gzip

        # Don't compress images
        SetEnvIfNoCase Request_URI \
        \.(?:gif|jpe?g|png)$ no-gzip dont-vary

        # Make sure proxies don't deliver the wrong content
        Header append Vary User-Agent env=!dont-vary
    </Location>

    # Add "Cache-control: public" = valid for 480 weeks
    # for proxies to keep images in cache:
    <FilesMatch "\.(ico|flv|jpg|jpeg|png|gif|swf)$">
        Header set Cache-Control "max-age=290304000, public"
    </FilesMatch>

    # Forbid files that start with "_"
    <FilesMatch "^_">
        Order allow,deny
        Deny from all
        Satisfy all 
    </FilesMatch>

    # Forbid .htaccess and .htpasswd
    <FilesMatch "^\.ht">
        Order allow,deny
        Deny from all
        Satisfy all 
    </FilesMatch>

    <Directory "/web/htdocs/wwog">
        Order allow,deny
        Allow from all
        Deny from none
        AllowOverride All 
    </Directory>

</VirtualHost>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X