7

最初に Alias フォルダーを使用して、プロジェクト ファイルを とは別の場所に保存し、次にこの要求に対してDocumentRootを実行しようとしています。ただし、ファイルmod_rewriteを解析していないようです。.htaccess

これは私の Alias ファイルの内容です:

Alias /test F:/Path/To/Project

<Directory F:/Path/To/Project>
    Order allow,deny
    Allow from all
</Directory>

これは私の.htaccessファイルです:

Options +FollowSymlinks
RewriteEngine on

RewriteRule .* index.php [NC] [PT]

エイリアスを削除すると、すべて正常に動作します。

4

2 に答える 2

7

mod_alias は常に mod_rewrite よりも優先されます。mod_alias ディレクティブを mod_rewrite でオーバーライドすることはできません。

この場合、 AliasMatch ディレクティブが役立ちます。

于 2012-08-28T14:14:42.597 に答える
5

エイリアスと書き換えを使用しようとしているが、競合するために使用できないいくつかのシナリオに対処するソリューションを次に示します。

DocumentRoot特定のアプリケーションが/var/www/example.com/myappであり、次の基本的なディレクトリ構造があるとします。ここで、パブリック リクエストは 内のファイル (css ファイルなど) に対するものであるか、それpublic以外の場合は を介し​​てルーティングされますindex.php

myapp/
|- private_library/
   |- private_file.php
|- private_configs/
   |- private_file.php
|- public/
   |- index.php
   |- css/
      |- styles.css

目的は 内public_webrootのコンテンツのみを提供することですが、URL は であってはなりexample.com/myappませんexample.com/myapp/public

以下はうまくいくように見えるかもしれません:

DocumentRoot /var/www/example.com
Alias /myapp /var/www/example.com/myapp/public
<Directory /var/www/example.com/myapp/public>
    # (or in this dir's .htaccess)
    RewriteEngine On
    RewriteBase /public
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [QSA,PT]
</Directory>

ただし、存在しないファイルの URL を要求すると (つまり、経由する必要があるファイルindex.php)、無限ループが発生します。

解決策の 1 つは、mod_alias を使用せず、次のようにアプリケーションのルート ディレクトリで mod_rewrite を使用することです。

DocumentRoot /var/www/example.com
<Directory /var/www/example.com/myapp>
    # (or in this dir's .htaccess)
    RewriteEngine On
    RewriteRule   (.*) public/$1 [L]
</Directory>
<Directory /var/www/example.com/myapp/public>
    # (or in this dir's .htaccess)
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [QSA,L]
</Directory>

そしてそれだけです!

于 2015-09-06T03:42:30.020 に答える