0

テンプレートの一部を編集して.htaccessファイルを作成する必要があります。ファイルのテンプレートの一部を次に示し.htaccessます。[NPAC_TMP:~core_dir]交換される部品は次のとおりです。

RewriteCond %{REQUEST_URI} !^[NPAC_TMP:~core_dir]/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ [NPAC_TMP:~core_dir]/$1
RewriteCond %{HTTP_HOST} ^(www.)?localhost:8888$
RewriteRule ^(/)?$ [NPAC_TMP:~core_dir]/index.php [L] ###DEFECTIVE LINE

ルビースクリプト:

template_tag = line.match(/\[NPAC_TMP:~(.*)\]/).to_s
param        = template_tag.split("~")[1][0..-2]

if(param == "core_dir")
  line[template_tag]= CONFIG[:core_dir]
  temp_file.puts line
end

スクリプトが実行されると、最後のものを除いてすべてが適切に置き換えられます。

RewriteCond %{REQUEST_URI} !^core/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ core/$1
RewriteCond %{HTTP_HOST} ^(www.)?localhost:8888$
RewriteRule ^(/)?$ [NPAC_TMP:~core_dir]/index.php [L] ###DEFECTIVE LINE

このメソッドが実行されるテンプレート ファイルはこれだけではありません。他のすべてのファイルでは、すべての項目が置き換えられる場所で適切に機能します。

トラブルシューティングの目的で、 をコピーしてRewriteCond %{REQUEST_URI} !^[NPAC_TMP:~core_dir]/"、欠陥のある行のすぐ下に配置しました。この追加された項目は正しく更新されましたが、その上の項目はまだ更新されていません。

次に、欠陥のある行のコピーをそのすぐ下にも配置し、2 つの欠陥のある行を受け取りました。これにより、この完全な文字列が構成されている方法で、REGEX を無効にしている何かを信じることができます。RewriteRule ^(/)?$ [NPAC_TMP:~core_dir]/index.php [L]

どんな助けでも大歓迎です。また、スクリプトの Ruby 部分を短縮または改善する方法について提案があれば、私はすべて耳にします。

4

2 に答える 2

2

グループを非貪欲にするのを忘れました:

template_tag = line.match(/\[NPAC_TMP:~(.*)\]/).to_s

次のようにする必要があります。

template_tag = line.match(/\[NPAC_TMP:~(.*?)\]/).to_s

問題を解決し、すべてのケースに一致するようになりました。

于 2013-06-09T06:20:41.753 に答える
1

あなたの.*正規表現の\[NPAC_TMP:~(.*)\]は貪欲です(可能な限り一致する)ので、一致します

[NPAC_TMP:~core_dir]/index.php [L]

あなたにグループを与える

core_dir]/index.php [L

http://rubular.com/r/NbZxd5prdTを参照

[^]]*(または[^]]+代わりに使用する必要があります.*

http://rubular.com/r/h0YcyWfvguを参照

次に正規表現の問題が発生した場合は、一致を印刷/トレースして、一致しているものを正確に確認できるようにすることをお勧めします。

また、正規表現をルビュラーで「開発」/記述して、期待どおりに機能することを確認します。

于 2013-06-09T06:21:58.897 に答える