Переписать относительный путь в Apache2 в Mac OS X Lion (10.7) - PullRequest
3 голосов
/ 15 ноября 2011

Я тщательно обыскал сайт и тоже гуглил, но безрезультатно.Я использую Apache2 + PHP на моей Mac OS X. Я почти не изменил конфигурацию ни на одной из них, просто достаточно, чтобы все работало правильно.Вот мой .htaccess файл:

<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>

Это прекрасно работает для всех файлов, расположенных в http://localhost/~milad/mysite/*.Но я хочу, чтобы мой .htaccess файл не зависел от особенностей моей установки, т. Е. Я не хочу включать в свой код строку RewriteBase ....

Но когда я удаляю эту строку, Apacheпытается сопоставить его с URL, который я не понимаю.Я получаю:

Не найдено

Запрошенный URL /Users/milad/Sites/newave/index.php не найден на этом сервере.

, что просто смешно, потому что файл index.php ТОЛЬКО там, куда указывает этот URI.В любом случае, когда я пытаюсь переписать на /index.php вместо index.php, я обнаруживаю, что он переписывается на http://localhost/index.php.Так почему же я не могу использовать только относительный путь или просто использовать ./index.php (Да, я тоже это пробовал).

Любое понимание будет с благодарностью.

1 Ответ

4 голосов
/ 16 ноября 2011

Проблема связана с вашей конфигурацией vhost:

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

Имеется в виду: «База вашего сайта /Users/milad/Sites/newave/». Поэтому, если вы хотите, чтобы база для вашего сайта была /~milad/mysite/, попробуйте изменить DocumentRoot

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

</VirtualHost>

Конечно, все файлы вашего сайта должны находиться в папке "/~milad/mysite/".

Затем в файле htaccess (обратите внимание, что ^(.*?)$ эквивалентен (.*), и я не понимаю, зачем вам нужен RewriteRule ^$, потому что в конце он должен обрабатываться должным образом):

Options +FollowSymLinks
Options +Indexes

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

Пожалуйста, скажите мне, если это работает


Редактировать: После комментариев, вот файл vhost, который работает для меня:

<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>
...