apache - mod_rewrite 检查文件是否存在变体

标签 apache mod-rewrite configuration

有没有办法检查请求的文件是否可以作为本地变体使用?

/project/config.php -> /project/config.local.php

我想用它在操作系统配置和测试系统配置之间切换。 匹配 *.local.* 的文件名将在 git 中被忽略。我不太熟悉 apache 重写引擎。提前感谢任何想法。

方案一

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{DOCUMENT_ROOT}/$1\.local\.$2 -f
RewriteRule ^(.+)\.([^./]+)$ /$1.local.$2 [L]

解决方案2

解决方案 1 适用于根目录,但 .htaccess/httpd.conf 应该如何调整才能在 <Directory> 中工作?和 Alias环境如:

Alias /projects "P:/projects/"
<Directory "P:/projects">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

对我来说,以下规则和条件似乎有效:

Alias /projects "P:/projects/"
<Directory "P:/projects">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted

    RewriteEngine on
    RewriteBase /projects/
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteCond %{REQUEST_FILENAME} ^(.*)/([\w\.]+)\.(\w+)$
    RewriteCond %1/%2\.local\.%3 -f
    RewriteCond %{REQUEST_URI} ^(.*)/([\w\.]+)\.(\w+)$

    RewriteRule (.*) %1/%2.local.%3 [L]
</Directory>

由于有四种不同的情况,我不确定这是否是最有效的方法。在这种情况下,最好有一个 REQUEST_URI_BASE包含 REQUEST_URI 的 var没有文件名。

最佳答案

您可以将这段代码放在您的 htaccess 中(它必须位于您的文档根文件夹中)

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{DOCUMENT_ROOT}/$1\.local\.$2 -f
RewriteRule ^(.+)\.([^./]+)$ /$1.local.$2 [L]

此代码检查请求的 URI 是否为现有文件。
如果是,它会检查它的 local 版本是否存在。
如果是,则它会在内部重写为 local 版本,而不是提供 normal 版本。


编辑:直接在 apache 配置文件中(因为它不在 文档根目录中,并且存储在另一个驱动器上,这有点困难,但这里有一个解决方案)。

在那种情况下我们不能再使用 %{DOCUMENT_ROOT}

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} ^([^/]+)(.+)\.([^./]+)$
RewriteCond %1%2\.local\.%3 -f
RewriteRule ^ %2.local.%3 [L]

关于apache - mod_rewrite 检查文件是否存在变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27921783/

相关文章:

java - 在 Java 程序中使用 Apache Ant API 以编程方式构建源文件

apache - 共享 httpd.conf

apache - RewriteRules 不加载某些 css。 js 和图像

apache - Mod重写隐藏文件夹

.htaccess - 这些 RewriteBase 和 RewriteRule 对我的 SEO 有用吗?

apache - 为什么 Apache 事件 MPM 表现不佳?

java - 多个本地化环境

java - eclipse ini配置

c# - 我应该在 C#.Net 应用程序中使用 XML 来存储配置设置吗?

linux - 添加尾部斜杠 mod_rewrite