1

我的网络路径是:( 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 绝对不匹配这些模式中的任何一个!

4

1 回答 1

2

删除第一条规则中的最后一个 [OR],如下所示:

# FORCE BROWSER TO URL AND DO NOT ATTEMPT TO SLUG MATCH THESE
RewriteCond %{REQUEST_URI} ^/john/checkout/(.*)$ [OR]
# Don't use OR in next line.
RewriteCond %{REQUEST_URI} ^/john/admin/(.*)$ 
RewriteRule ^.*$ - [L]
于 2013-03-03T06:00:04.170 回答