我的网络路径是:(
http://git.example.com/
例如)
我的文档根是:
/home/user/git/
在文档根目录中,我有两个文件夹:
/home/user/git/john
/home/user/git/doe
这些文件夹分别代表 john 和 doe 的 git 存储库。它们托管在 Web 服务器上,因此在提交给主服务器之前,可以在创建代码时对其进行测试。
我遇到的问题是 repo 中的站点代码有一个 wordpress 样式的 .htaccess 文件,因此脚本可以处理数据库中为每个产品等指定的所有页面 slug。我的 .htaccess 中有以下代码目录内的/home/user/git/john
文件:
RewriteEngine On
RewriteBase /john/
# FORCE BROWSER TO URL AND DO NOT ATTEMPT TO SLUG MATCH THESE
RewriteCond %{REQUEST_URI} ^/john/checkout/(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^/john/admin/(.*)$ [OR]
RewriteRule ^.*$ - [L]
# ROUTE THROUGH CMS
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
我还尝试将 rewritebase 更改为 just/
并且我尝试将最后一行更改为RewriteRule . /john/index.php
以及其中的所有变体。我所做的一切都不起作用。
我说的不工作是什么意思?好吧,说我有 url http://git.example.com/john/some_product_name.html
- 我得到一个 404 not found 错误,而 apache 错误日志只有一个标准的 404 no such file for the request。而已。就像“不,文件不存在......你应该在找不到文件时重写它!”
无论如何,当一切都在根目录之外运行时,这个确切的脚本可以完美地工作,就像它在实时站点上一样,但是将副本移动到子目录一直是个问题。我可以为项目中的每个开发人员创建一个新的子域,然后从他们的 doc_root 中运行 git,但实际上......应该有一种方法可以使这项工作。我错过了什么?
另外 - 我可以确认重写根本没有发生,因为在我的index.php
文件顶部,我有:echo "I'm here"; exit;
所以我应该看到一个空白的白页,而不是找不到 404,并显示消息“我在这里”。我不。
** 更新 **
我像这样通过顶部的线条注释掉了力,它现在正在工作:
RewriteEngine On
RewriteBase /john/
# FORCE BROWSER TO URL AND DO NOT ATTEMPT TO SLUG MATCH THESE
#RewriteCond %{REQUEST_URI} ^/john/checkout/(.*)$ [OR]
#RewriteCond %{REQUEST_URI} ^/john/admin/(.*)$ [OR]
#RewriteRule ^.*$ - [L]
# ROUTE THROUGH CMS
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
为什么这些线路会导致这个问题?我正在访问的 url 绝对不匹配这些模式中的任何一个!