2017-10-02 2 views
1

でのindex.htmlへのすべての要求は、私は現在、次の.htaccessを持っているポイント:のApache 2.4の.htaccess - 一つの例外を除い

<IfModule mod_rewrite.c> 
    Options Indexes FollowSymLinks 
    RewriteEngine On 
    RewriteBase /production/ 
    RewriteRule ^index\.html$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.html [L] 
</IfModule> 

Webサーバのドキュメントルートは、現在、上記で参照/productionフォルダ(.htaccessファイルです/productionが削除され、すべてのコードコミットで再構築されるため、親フォルダにあります)。上記は私のサイトへのすべてのトラフィックをindex.htmlに導きます。

私はこれに対して例外を作りたいと思います。リクエストがwww.mydomain.com/specialrequestの場合は、実行する親フォルダにscript.phpというPHPスクリプトが必要です。レビューに

が、これは私の/var/www/htmlディレクトリです:

-html 
    -production 
    -anotherfolder 
    -.htaccess 
    -script.php 

Apacheは/var/www/html/productionを指していると私は要求が/specialrequestでない限り、すべての要求は、そのディレクトリにindex.htmlファイルに行きたい - その場合には、私はscript.phpを実行したいと思います。

答えて

0

Apacheは/var/www/html/productionが本当にDocumentRootのように定義されているので、/var/www/html/production

を指しています。そして、あなたの.htaccessファイルはの上にあり、文書ルートはです。また、(この特別な要求を受け取った)書き換えたいファイルも、ドキュメントルートの上にあります。

残念ながら、.htaccessファイルの場所に関係なく、.htaccessを使用してドキュメントルートの上にあるファイルに書き換えることはできません。これは、ディレクトリ.htaccessの置換ファイルがURLパスを取るため、ドキュメントルートの上にあるURLに書き換えようとしても無効であるためです。しかし、サーバの設定(または仮想ホスト)にアクセスした場合は、この方法を使用してURLパスではなくファイルシステムのパス(ドキュメントルートの上を含む)に書き換えることができます。

script.phpは、.htaccessを使用してこれを行うには、ドキュメントルート内にある必要があります。その場合には、あなたが何かを行うことができます:

RewriteEngine On 

# Exception 
RewriteRule ^specialrequest$ /script.php [L] 

# Front controller 
RewriteRule ^index\.html$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.html [L] 

しかし、この場合は、script.phpは(ドキュメントルートの上)ではない/html/script.phpで、(ドキュメントルートに)/html/production/script.phpに位置する必要がある - のように、現在のファイルシステム構造。

.htaccessファイルのRewriteBase /production/ディレクティブは、まったく余分です。とにかく相対パス置換は使用していませんが、/productionドキュメントルートであるため、/index.html(ドキュメントルートの相対URLパス)は/production/index.htmlに書き換えられます。


ただし、サーバーの設定(または仮想ホスト)に直接書き込むことができれば、必要な処理を行うことができます。例:

RewriteEngine On 

# Rewrite to filesystem path (in the server config) 
RewriteRule ^/specialrequest$ /var/www/html/script.php [L] 

# Front controller 
RewriteRule ^/index\.html$ - [L] 
RewriteCond %{LA-U:REQUEST_FILENAME} !-f 
RewriteCond %{LA-U:REQUEST_FILENAME} !-d 
RewriteRule ^/. /index.html [L] 
+1

気をつけて説明してください。 – MrWhite

関連する問題