2016-12-24 4 views
2

URLにwww.mydomain.com/compare.phpを入力した場合、.htaccessでルールを設定したい場合は、 'public_html'をrootとして設定します。そうでない場合は、 'public'フォルダ。異なるフォルダを指定する.htaccessのルールを設定する

RewriteRule ^(?!compare-source.php).*)$ public/$1 [L] 

私は以下の結果を得たいです。

(URLがの場合)www.mydomain.com/compare.phpヒットファイル。

public_html/compare.php 

URLがwww.mydomain.com/ OR www.mydomain.com/homeなどのファイル、次のヒットしている場合。

public_html/public/index.php 

私はいつも:-(誰かが私に適切な説明と解決策を与えることができ、正規表現で、これらのapacheのルールに弱いのですか?

あなたの答えは歓迎されている、あなたはこのクレイジーな事がでどのように機能するかを記述することができますしてください詳細おかげ

答えて

1

試してみてください。。。

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/public 
RewriteRule ^((?!compare\.php).*)$ /public/$1 [L] 

RewriteEngineディレクティブは、エンジンを書き換えランタイムを有効または無効に

RewriteCondディレクティブはルール条件を定義します。次のルールは、この条件が満たされている場合にのみ使用されます。この場合、要求されたURLのREQUEST_URI(!のため)は^のために始まり、/publicで始まりません。我々はすでに書き換えられたURLを書き換えしたくないので、私たちはこの条件を必要とする - それが500

最後にループと内部エラーを引き起こす、RewriteRuleは、ホスト名の後に正規表現パターン^((?!compare\.php).*)$)URLの一部に対して一致します先頭にスラッシュを付けずに入力します。パターンが一致すると、置換(public/$1)が元のURLパスに置き換わります。平易な言葉で

URLパスが(理由?!の)compare.phpで始まらない場合は、最初(^)とend($)の間のすべて(.*)を選択し、変数$1に配置します。次に元のURLパスを/public/$1に置き換えます。あなたは、サイトのルートにこの.htaccessファイルを使用することができます

RewriteCond %{REQUEST_URI} !^/public 
RewriteCond %{REQUEST_URI} !^/compare\.php 
RewriteRule ^(.*)$ /public/$1 [L] 
+1

おそらく、もっと完全な答えにするために、これが何であるかについていくつかの説明を追加することができます。 –

+0

@Dusan Bajicあなたのソリューションは完全に一致しましたが、それがどのように動作しているかを記述できる場合は...ありがとうございました – zarpio

+0

確かに、編集を参照してください。 –

1

Anubhavaの答え@

は、彼はただのRewriteRuleで両方の条件を配置し、またようでも読みやすく書くことができ、また、正確です

RewriteEngine On 

# route /home/ or /home to/
RewriteRule ^home/?$/[L,NC] 

# if not compare-source.php or public/* then route to /public/* 
RewriteRule ^(?!public/|compare-source\.php$).*)$ public/$1 [L,NC] 
関連する問題