【问题标题】:I want to load text string from an external file into my .htaccess file我想将外部文件中的文本字符串加载到我的 .htaccess 文件中
【发布时间】:2022-01-28 21:22:16
【问题描述】:

我想知道是否有办法将文本字符串加载到我的 htaccess 文件中。我不想在文件中手动键入它。 这是我已经拥有的

<IfModule mod_rewrite.c> 
RewriteBase /file_name.txt/ 
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^gwcgroup\.co.uk [OR]
RewriteCond %{HTTP_HOST} ^www\.gwcgroup\.co.uk$
RewriteRule .* https://gwcgroup.co.uk%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^www\.gwcgroup\.co.uk$
RewriteRule .* https://gwcgroup.co.uk%{REQUEST_URI} [R=301,L]


 
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

任何建议将不胜感激。提前致谢

【问题讨论】:

  • 感谢分享您的 htaccess 文件。 I'm wondering if there's a way to load text string into my htaccess file.您能否详细说明此声明?谢谢。
  • 一个“.htaccess”文件是一个配置文件。它本身并不意味着以任何方式活跃。您当然可以使用某种形式的预处理器根据您编译的某些模板以动态方式创建“.htaccess”文件。
  • @RavinderSingh13:我在想是否可以将带有字符串的文本文件读入该行。实际上,该链接是我的文件夹名称。但我不想直接输入

标签: .htaccess


【解决方案1】:

这感觉就像X-Y problem

(警告...后面有很多“但是”...)

是的,您可以使用 mod_rewrite 和 Apache 表达式 (Apache 2.4) 将文本文件读入 .htaccess 文件。但是,您不能将其直接读入 RewriteBase 指令,正如您所暗示的那样。但是,您可以读取文件并将其存储在环境变量中并有效地使用它来模拟 RewriteBase 指令的作用。

但是,在您发布的.htaccess 文件中,您仅在最后一条规则(最后一行)中使用了RewriteBase。因此,您只需要针对那一条规则(不需要环境变量)。

但是,还有其他方法可以有效地计算 RewriteBase(或者更确切地说计算根 URL 路径并将其存储在 env var 中),具体取决于您要执行的操作。因此,您可能根本不需要这样做。

您发布的文件中还有其他错误/不一致,这也让我怀疑这是否真的是您应该做的。

无论如何,关注最后一条规则(这是您文件中唯一适用RewriteBase 的地方)......

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

从外部文件file_name.txt(在文档根目录中)读取并使用该文件的内容作为最后一个RewriteRule指令中替换字符串中的基本URL路径你可以这样做:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond expr "file('%{DOCUMENT_ROOT}/file_name.txt') =~ m#^(/.*)#"
RewriteRule (.*) %1index.php?/$1 [L]

%1 反向引用(指向前面 CondPattern 中的捕获组)保存文本文件第一行的内容(因为点与换行符不匹配)。虽然,这个正则表达式相当通用(它匹配 everything 在初始斜杠之后 - 到行尾) - 您可能希望使其更具限制性,以确保它只匹配有效的 URL -你期待的路径。

如果 file_name.txt 不存在(或无法读取),则会发生非致命的 rewrite:error(检查您的错误日志)并且规则会失败。

file_name.txt 包含一行格式:

/path/to/dir/

【讨论】:

    【解决方案2】:

    谢谢,伙计们。我找到了解决方案。我将脚本存储在一个变量中,并在每次需要时动态创建和更新 htaccess 文件。 这是我的工作代码

    $htaccess = fopen("./.htaccess", "w") or die("Unable to open file!");
            fwrite($htaccess, $ht_input);
            fclose($htaccess);
    

    【讨论】:

    • 这看起来像 php 代码...请记住,如果您的 http 服务器处理此代码,那么这种方法可能会带来巨大的安全问题...一般来说,软件应该 永远从安全的角度来看不能修改自己。我知道,这条规则经常被违反,大多数易于使用的 Web 应用程序都违反了它,MS Windows 系统下的软件安装也有这个问题。但这条规则仍然值得考虑......
    猜你喜欢
    • 2023-02-04
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    相关资源
    最近更新 更多