繁体   English   中英

mod_rewrite检查变量中是否存在文件

[英]mod_rewrite check if file exists in variant

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

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

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

解决方案1

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 VAR其中确实包含REQUEST_URI没有文件名。

您可以将此代码放入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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM