我的网络路径是:
http://git.example.com/
(例如)
我的文档根目录是:
/home/user/git/
在doc根目录中,我有两个文件夹:
/home/user/git/john
/home/user/git/doe
这些文件夹分别代表john和doe的git repos。它们托管在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
我也尝试将重写基础更改为/
,我尝试将最后一行更改为RewriteRule . /john/index.php
及其中的所有变体。我什么都做不了。
无意义是什么意思?好吧我说我有网址http://git.example.com/john/some_product_name.html
- 我发现404找不到错误,而apache错误日志只有一个标准的404没有这样的请求文件。而已。它就像“没有糟糕的文件不在那里......当你找不到文件时,你会想重写它!”
无论如何,当所有内容都在根目录下运行时,这个确切的脚本可以完美地运行,因为它位于实际站点上,但是将副本移动到子目录一直是个问题。我可以为项目中的每个开发人员创建一个新的子域,并从他们的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
为什么世界上这些线会导致这个问题?我访问的网址肯定与这些模式都不匹配!
答案 0 :(得分: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]