有没有办法检查所请求的文件是否可用作本地变体?
/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]
解决方案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
而没有文件名,那将会很不错。
答案 0 :(得分:4)
您可以将此代码放入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]