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.conf或httpd.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
,然后将此代码放在您的目录.htaccess
下DOCUMENT_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=302
为R=301
.R=301
在测试mod_rewrite规则时避免使用(永久重定向).
在 .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)