我一直在集思广益,解决一个问题,我真的想为个人项目目的而实现。现在,我相信我会谈论的这样的事情是可能的,但我无法在谷歌上挖掘任何东西。因此,要么没有人需要做这样的事情,要么就没有人想过要测试它,至少要有趣。 要了解我现在想到的所有内容,我将首先简单地设置我们的虚假域名和假项目结构。
域名
example.org
结构:
root/
├── dir-one/
│ ├── scripts/
│ ├── styles/
│ └── index.php
├── dir-two/
│ ├── scripts/
│ ├── styles/
│ └── index.php
└── index.php
我们正在运行apache
服务器并使用php
作为服务器端语言。
话虽这么说,我现在可以解释一下我们在这里有什么。
让我们说,我们的根index.php
文件只是requires
一个或另一个目录,具体取决于某种方式确定的变量......
因此,root/index.php
的内容看起来像这样:
<?php
$case = $determine ? 'dir-one' : 'dir-two';
require_once "$case/index.php";
?>
但是,dir-one/index.php
和dir-two/index.php
的内容具有资源的相对路径。
<link href="/styles/app.css" rel="stylesheet">
<script src="/scripts/app.js"></script>
所以当我们访问时,这些显然会加载:
example.org/one-dir
但他们不会在我们刚刚访问的案例中工作:
example.org
我们的php
需要该目录,但我们所有的相对路径现在都已损坏。为了解决这个问题,我想到了.htaccess
和mod_rewrite
。
这些事情让我想到了:
我们能以某种方式告诉apache,我们的资源在dir_one
或dir_two
内可用,具体取决于哪一个是required
吗?
我们可以使用queries
而不需要一个目录或另一个目录,我们可以通过.htaccess
文件告诉我们的服务器向用户展示什么。例如:example.org/?page=one
(如果可能的话,我们会重写以显示dir_one/index.php
吗?我们的资源现在可以运作了吗?我想是这样的......
但是,如果我不希望有任何可见的查询参数,因为它只有一个目录或另一个,具体取决于具体情况......所以这一次,我想到了设置我们可以通过headers
设置自定义php
,我们的apache
可以访问它们,对吗?我真的希望如此...我的意思是,我读到了一个我们可以访问它们的地方,但是我们可以从中读取它的实际值,或者只是检查标题是否存在?
因此,我们正在将root/index.php
文件内容更改为:
<?php
$case = $determine ? 'dir-one' : 'dir-two';
header("C-Load: $case");
?>
现在,我希望实现的内容与query
参数相同,但在这种情况下,如果标题存在,则从自定义header
读取值,这将始终是案件。根据确定结果,该值可以是dir-one
或dir-two
。
我对.htaccess
并不了解,我只能做基本的事情,但我现在要挖掘一下名为谷歌的铲子,我真的希望我可以自己解决一些问题。 。哎呀,如果我们使用relative
和RewriteCond
来显示一个目录或另一个,我甚至没有测试我们的RewriteRule
路径是否有效。但如果可能的话,我确定我们也可以用header
做到这一点......
任何形式的帮助,指针,文章甚至解决方案都会受到赞赏。
更新#1:
在进一步挖掘之后,我还没有找到解决方案,但我认为我已接近......但是,出于某种原因,似乎我无法与%{HTTP:header}
的价值进行比较?
PHP
<?php
header("X-Load-Directory: one");
?>
APACHE(.htaccess)
RewriteCond %{HTTP:X-Load-Directory} ^one$
RewriteRule ^$ /dir-one/index.php [L]
就我而言,这应该工作得很好,但事实并非如此。它永远不会通过Cond
。
更新#2:
另一个更新......我刚刚意识到,我可能无法在自己的服务器中做这样的事情。所以我使用Postman
向我自己的localhost发送GET
请求,并使用上面提到的自定义标头X-Load-Directory
,在这种情况下它确实有效。它实际上取决于该标头,这意味着我无法从php设置该标头,然后从htaccess
访问它。是的,从逻辑上来说,当我想到它时,顺序就没有意义了。
答案 0 :(得分:0)
我现在已经挖掘了一段时间,我发现了一个非常简单的html
标签解决方案,这将有效...
在我们的dir-one/index.php
和dir-two/index.php
中,我们需要添加此标记并将href
指定到相应的目录...
<base href="/dir-one/">
通过删除第一个正斜杠/
...
<link href="styles/app.css" rel="stylesheet">
<script src="scripts/app.js"></script>
P.S。我不知道
/styles/app.css
是绝对路径,因为它以正斜杠开头。
现在,当我们require
php
时,这些相对路径就可以了。
但是,我仍然希望从我的问题中找出另外两种方法。
使用.htaccess
和query
字符串解析它以确定以root身份加载的目录。
使用.htaccess
和自定义headers
解析它以确定要以root身份加载的目录。
因为在这两种情况下,我可以避免从任一目录中触及相对路径资源,它会神奇地工作吗?