Virtualhost

2 個網站託管在同一個域上,1 個需要看起來像一個子文件夾 (/blog)

  • June 1, 2021

我為執行 apache 的新項目購買了一個 VPS。

在它上面,我在同一個域上有 2 個網站。

第一個是 Ruby on Rails /var/www/html

第二個是 Wordpress /var/www/blog

我希望 Wordpress 像 ruby​​ (/blog) 的子目錄一樣。

Ruby on Rails 網站有效,但如果我去 /blog 它只是說我正在尋找的頁面不可用(使用 RoR 404 模板)

RoR 配置:

<VirtualHost *:443>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html/public
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       SSLEngine on
       SSLCertificateFile /etc/apache2/certificate/apache-certificate.crt
       SSLCertificateKeyFile /etc/apache2/certificate/apache.key
 
</VirtualHost>

Wordpress 的配置文件:

<VirtualHost *:443>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/blog
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       SSLEngine on
       SSLCertificateFile /etc/apache2/certificate/apache-certificate.crt
       SSLCertificateKeyFile /etc/apache2/certificate/apache.key
       Alias /blog /var/www/blog
</VirtualHost>

也許解決方案是 /var/www 中的 htacces 文件。你能指點我嗎?謝謝 !

在它上面,我在同一個域上有 2 個網站。

好吧,您實際上有 1 個網站(1 個域)。只是您在該 1 網站的子目錄中有 WordPress。因此,您應該只有 1 個<VirtualHost>容器,而不是 2 個 - 這似乎是您在這裡出錯的地方。

第二個<VirtualHost>沒有被使用,應該被刪除。

您需要將Alias /blog /var/www/blog指令移動到第一個<VirtualHost>容器中,並通過在 vHost 容器中包含以下內容來允許訪問此目錄:

# WordPress
<Directory /var/www/blog>
   # Permit access to this area
   Require all granted

   # Allow per-directory overrides if want to use WP htaccess file
   AllowOverride All
</Directory>

我想你一定已經有類似的東西了/var/www/html/public

您確實應該ServerName在此 vHost 容器中包含一個指令,否則,這只是通過首先定義而充當“預設值”。例如:

# Declare the hostname that this vHost defines
ServerName example.com

然後在此之前定義一個“預設”vHost 容器來擷取非規範請求。

引用自:https://serverfault.com/questions/1065364