如何使用.htaccess而不是VHost将文档根目录设置为子目录

GGi*_*Gio 6 php apache .htaccess vhosts

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

 <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>
Run Code Online (Sandbox Code Playgroud)

Howerver Im将我的网站托管给托管公司justhost.com,他们不允许我修改httpd-vhosts.confhttpd.conf.现在我的整个网站都经过编码,以便website_1下的文件引用website_1下的其他文件,使用简单的斜杠"/"表示website_1被视为文档根目录.这在本地机器上运行得很好但是当上传到主机时它给我服务器错误,因为它无法找到文件,因为它试图在public_html中找到这些文件

例如:

  public_html
      - website_1
         - script.php
         - style.css
Run Code Online (Sandbox Code Playgroud)

在我的script.php里面:

<a href="/style.css">See My Style</a>
Run Code Online (Sandbox Code Playgroud)

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

有没有办法在不使用VHost的情况下拥有多个文档根?喜欢使用.htaccess或其他东西.我想尽量避免重写代码,因为它大约有10万行代码.

anu*_*ava 11

启用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]
Run Code Online (Sandbox Code Playgroud)

验证一切正常后,请替换R=302R=301.R=301在测试mod_rewrite规则时避免使用(永久重定向).


Ama*_*ney 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]
Run Code Online (Sandbox Code Playgroud)