8

在我的本地机器上,以下工作完美:

 <VirtualHost *:80>
       ##ServerAdmin postmaster@dummy-host2.localhost
       DocumentRoot "C:/xampp/htdocs/website_1"
       ServerName testpage.com/website_1
       ##ServerAlias www.recruitement.localhost
       ##ErrorLog "logs/dummy-host2.localhost-error.log"
       ##CustomLog "logs/dummy-host2.localhost-access.log" combined
 </VirtualHost>

但是,我将我的网站托管给名为justhost.com的托管公司,他们不允许我修改httpd-vhosts.confhttpd.conf。现在我的整个网站都被编码了,因此 website_1 下的文件使用简单的斜杠“/”来引用 website_1 下的其他文件,这意味着 website_1 被视为文档根目录。这在本地机器上完美运行,但是当上传到主机时,它给了我服务器错误,因为找不到文件,因为它试图在public_html中找到这些文件

例如:

  public_html
      - website_1
         - script.php
         - style.css

在我的script.php里面:

<a href="/style.css">See My Style</a>

这在本地机器上效果很好,但在主机上它失败了,因为它试图在public_html而不是public_html/website_1下找到 style.css

有没有办法在不使用 VHosts 的情况下拥有多个文档根目录?就像使用 .htaccess 或其他东西一样。请我尽量避免重写代码,因为它大约有 10000 行代码。

4

3 回答 3

17

通过启用 mod_rewrite 和 .htaccess httpd.conf,然后将此代码放在您.htaccessDOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{DOCUMENT_ROOT}/website_1/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/website_1/$1 -d [OR]
RewriteCond %{DOCUMENT_ROOT}/website_1/$1 -l
RewriteRule (?!^website_1/)^(.*)$ /website_1/$1 [R=302,L,NC]

确认它工作正常后,替换R=302R=301. R=301在测试你的 mod_rewrite 规则时避免使用(永久重定向)。

于 2013-05-12T23:28:21.720 回答
5

在 .htaccess 中创建一个条目。假设您有一个网站 abc.com。您想在目录中运行另一个网站。然后在指向 abc.com 的父目录中创建一个 .htaccess

RewriteEngine on

RewriteCond %{HTTP_HOST} ^abc.com$ [NC,OR]

RewriteCond %{HTTP_HOST} ^www.abc.com$ 

RewriteCond %{REQUEST_URI} !subdirectory/

RewriteRule (.*) /subdirectory/$1 [L]
于 2013-08-24T08:16:08.277 回答
2

将所有图像请求重写为 root 可能是一个解决方案。您可以在根目录的一个 .htaccess 文件中尝试此操作:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

# Check if request is for an image at root. Add/remove file types if necessary.
RewriteCond %{REQUEST_URI}  ^/([^.]+)\.(png|jpg|gif|css) [NC]
RewriteCond %{REQUEST_URI}  !/website_1  [NC]
# Rewrite request to point to "website_1" directory
RewriteRule .*               /website_1/%1.%2          [L,NC]
于 2013-05-13T14:11:12.870 回答