Как заставить mod_wsgi (обзорная доска) и mod_php (wordpress) работать на одном и том же имени сервера, но по другому пути

Я пытаюсь заставить свой сайт wordpress, а также сайт моей доски отзывов работать под одним и тем же доменным именем.

Ex:

www.mysite.com (this is where i host my wordpress site)
www.mysite.com/reviewboard (this is where I want to host my reviewboard site)

Я могу заставить работать одно или другое в зависимости от моего файла httpd-vhosts.conf. Однако я не могу заставить работать оба (здесь мне нужна ваша помощь!).

Вот как я размещаю свой сайт WordPress:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/opt/local/apache2/htdocs/mysite"
    ServerName www.mysite.com
    ErrorLog "/opt/local/apache2/logs/mysite.com-error_log"
    CustomLog "/opt/local/apache2/logs/mysite.com-access_log" common
</VirtualHost>

Вот как я размещаю свой сайт доски отзывов (который затем ломает мой сайт WordPress):

<VirtualHost *:80>
    ServerName www.mysite.com
    DocumentRoot "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs"

    # Error handlers
    ErrorDocument 500 /errordocs/500.html

    WSGIPassAuthorization On
    WSGIScriptAlias "/reviewboard" "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/reviewboard.wsgi/reviewboard"

    <Directory "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs">
        AllowOverride All
        Options -Indexes +FollowSymLinks
        Allow from all
    </Directory>

    # Alias static media requests to filesystem
    Alias /reviewboard/media "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/media"
    Alias /reviewboard/static "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/static"
    Alias /reviewboard/errordocs "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/errordocs"
    Alias /reviewboard/favicon.ico "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/static/rb/images/favicon.png"
</VirtualHost>

Итак, теперь я хочу выяснить, как их каким-то образом объединить, чтобы я мог разместить доску отзывов по указанному выше пути, не нарушая мой сайт WordPress. Я попытался использовать команду Alias, как указано здесь: http://stackoverflow.com/questions/1553165/multiple-django-sites-with-apache-mod-wsgi и здесь https://code.google.com/p/modwsgi /wiki/Руководства по конфигурации

Однако я не могу заставить его работать. Вот мой WIP. Если вы можете очень конкретно указать, что мне нужно сделать, чтобы изменить это, чтобы оно работало, это было бы здорово, так как я новичок в таких вещах. Спасибо!

<VirtualHost *:80>
    ServerName www.mysite.com
    DocumentRoot "/opt/local/apache2/htdocs/mysite"


    # Error handlers
    #hmm not sure where to put this since my document root is different??????
    #ErrorDocument 500 /errordocs/500.html

    WSGIPassAuthorization On
    Alias /reviewboard/ /opt/local/apache2/htdocs/mysite/reviewboard/htdocs/

    <Directory "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs">
        Options ExecCGI
        SetHandler wsgi-script  
        AllowOverride All
        Options -Indexes +FollowSymLinks
        Allow from all
    </Directory>

    # Alias static media requests to filesystem
    # Since I added the alias command above these are complaining about 
    #overlapping an earlier alias when I restart my apache server????
    Alias /reviewboard/media "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/media"
    Alias /reviewboard/static "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/static"
    Alias /reviewboard/errordocs "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/errordocs"
    Alias /reviewboard/favicon.ico "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/static/rb/images/favicon.png"
</VirtualHost>

person user1609530    schedule 11.03.2013    source источник


Ответы (2)


Если вы используете один и тот же домен для обоих, вы не можете использовать разные разделы VirtualHost для обоих. Итак, во-первых, вам нужно объединить обе конфигурации в один раздел VirtualHost. Я бы начал с конфигурации WordPress, а затем добавил несколько битов для ReviewBoard:

<VirtualHost *:80>

    ServerAdmin [email protected]
    DocumentRoot "/opt/local/apache2/htdocs/mysite"
    ServerName www.mysite.com
    ErrorLog "/opt/local/apache2/logs/mysite.com-error_log"
    CustomLog "/opt/local/apache2/logs/mysite.com-access_log" common

    WSGIPassAuthorization On
    WSGIScriptAlias /reviewboard /opt/local/apache2/htdocs/mysite/reviewboard/rb.wsgi
    <Directory /opt/local/apache2/htdocs/mysite/reviewboard>
        Order deny,allow
        Allow from all
    </Directory>

    Alias /reviewboard/media "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/media"
    Alias /reviewboard/static "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/static"
    Alias /reviewboard/errordocs "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/errordocs"
    Alias /reviewboard/favicon.ico "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/static/rb/images/favicon.png"

</VirtualHost>

Вам нужно создать скрипт WSGI (но он у вас уже должен быть). Возможно, вы захотите указать путь, отличный от того, что я указал здесь в конфигурации, чтобы ваши разрешения были более безопасными.

person djc    schedule 11.03.2013
comment
Когда я использую код, который вы вставили, он позволяет моему сайту WordPress быть видимым в корневом каталоге сервера, но мой сайт доски отзывов, когда я набираю www.mysite.com/reviewboard, выдает следующую ошибку: Не найдено, запрошенный URL-адрес / доска отзывов не найден на этом сервере. Несмотря на то, что он существует в папке с именем reviewboard в моем корневом каталоге. - person user1609530; 11.03.2013
comment
Мой путь к моему сценарию wsgi был неправильным, и я это исправил. Итак, это улучшение! Теперь я могу видеть свой сайт, а также сайт доски отзывов (поскольку на странице загружается оформление/внешний вид доски отзывов). Тем не менее, он показывает ошибку 404 с обзорной доской, говорящей, что страница, которую вы искали, не существует. Может быть, это потому, что Document Root нет на моем сайте/обзорной доске? Есть ли способ исправить это? - person user1609530; 11.03.2013

Используя комбинацию того, что написал djc, и некоторые мои работы, вот рабочая версия, так что:

www.mysite.com (wordpress site loads correctly)(mod_php)
www.mysite.com/reviewboard (reviewboard site loads correctly)(mod_wsgi)

Важно Убедитесь, что вы очищаете кеш браузера каждый раз, когда перезагружаете сервер apache, поскольку я постоянно попадал в ловушку из-за того, что он показывал неверные данные, поскольку я забыл это сделать.

Важно2 Убедитесь, что "/reviewboard" следует за "reviewboard.wsgi" и становится "reviewboard.wsgi/reviewboard", иначе он не будет работать и выдаст ошибку 404!

Вот рабочая версия:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName www.mysite.com
    DocumentRoot "/opt/local/apache2/htdocs/mysite"
    ErrorLog "/opt/local/apache2/logs/mysite-error_log"
    CustomLog "/opt/local/apache2/logs/mysite-access_log" common

    WSGIPassAuthorization On
    WSGIScriptAlias /reviewboard /opt/local/apache2/htdocs/mysite/reviewboard/htdocs/reviewboard.wsgi/reviewboard
    <Directory /opt/local/apache2/htdocs/mysite/reviewboard>
        Allow from all
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    # Alias static media requests to filesystem
    Alias /reviewboard/media "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/media"
    Alias /reviewboard/static "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/static"
    Alias /reviewboard/errordocs "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/errordocs"
    Alias /reviewboard/favicon.ico "/opt/local/apache2/htdocs/mysite/reviewboard/htdocs/static/rb/images/favicon.png"
</VirtualHost>
person user1609530    schedule 12.03.2013