Php htaccess-检查HTML中的原始URL是否包含“/`

Php htaccess-检查HTML中的原始URL是否包含“/`,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我有一个目录树,看起来像: public_html _COMMON INIT.php project-1 index.php project-2 index.php 这两个项目使用来自_COMMON的文件。首先,他们通过index.php中的以下代码加载一些配置: require_once '../_COMMON/INIT.php'; 之后,他们通过以下方式使用公共资源: <script src="../_COMM

我有一个目录树,看起来像:

public_html
    _COMMON
        INIT.php
    project-1
        index.php
    project-2
        index.php
这两个项目使用来自_COMMON的文件。首先,他们通过index.php中的以下代码加载一些配置:

require_once '../_COMMON/INIT.php';
之后,他们通过以下方式使用公共资源:

<script src="../_COMMON/node_modules/jquery/dist/jquery.min.js"></script>

为此,我使用以下访问权限将
project1.com
URL重写到
project1.com/project-1/

RewriteCond %{HTTP_HOST} ^(?:www\.)?project1.com$
RewriteCond %{REQUEST_URI} !/project-1
RewriteRule ^(.*)$ /project-1/$1 [L,NC,QSA]

问题来了。

require\u once
部分起作用,因为在重写请求URL后,
INIT.php
的URL被解析,这意味着:

  • 用户访问
    http://project1.com/
  • URL重写为
    http://project1.com/project-1/
  • 执行
    http://project1.com/project-1/index.php
  • http://project1.com/project-1/index.php
    。/\u COMMON/INIT.php
    解析为
    http://project1.com/_COMMON/INIT.php
  • 但是,脚本没有成功加载。我猜这是因为
    jquery.min.js
    的URL在重写URL之前在浏览器中解析。我猜会发生以下情况:

  • 用户访问
    http://project1.com/
  • http://project1.com/project-1/index.php提供了
    ,但URL是http://project1.com/
  • 浏览器看到
    。/\u公共/node\u模块…
    ,并尝试解决它
  • 浏览器启动对
    http://project1.com/_COMMON/node_modules/jquery/dist/jquery.min.js
  • URL被重写为
    http://project1.com/project-1/_COMMON/...
    不存在的

  • 我试过的 我可以补充一点:

    RewriteCond %{REQUEST_URI} !/_COMMON
    
    到我的HTA访问并完成

    不过,这是一种低俗的解决方案。如果project-1在根目录中使用另一个目录中的文件会怎么样?在htaccess中添加所有这些目录似乎很愚蠢。如果URL不包含
    \u COMMON
    ,我不需要重写它,如果它不在目录树上,也就是说,如果它包含
    。/
    ,我需要重写它有办法检测吗?

    基本上,我想要的是而不是重写以
    开头的URL。我试过:

    RewriteCond %{REQUEST_URI} !\.\./
    

    但它不起作用。我想这是因为
    。/
    是在浏览器中解析的,所以它不在htaccess实际处理的URL中是否有其他方法可以检测包含的原始URL是否未发送到服务器。URL在发送前在浏览器中解析。您可以尝试将
    RewriteEngine Off
    添加到要从重写中排除的每个文件夹中的.htaccess文件中。
    。/
    不会发送到服务器。URL在发送前已在浏览器中解析。您可以尝试将
    RewriteEngine Off
    添加到要从重写中排除的每个文件夹中的.htaccess文件中。
    RewriteCond %{REQUEST_URI} !/_COMMON
    
    RewriteCond %{REQUEST_URI} !\.\./