簡體   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