0

.htaccess ファイルを移動したかった - vhost conf ファイルにリダイレクト...

これは機能していましたが、htaccess リダイレクトは機能しませんでした...

<VirtualHost *:80>
ServerName  dev.x.com
ServerAlias dev.x.com
DocumentRoot    "C:/wwwroot/x"
Alias       /modules/    "C:/wwwroot/x/_my_modules/"
ErrorLog    "C:/wwwroot/x/_my_logs/error.log"
CustomLog   "C:/wwwroot/x/_my_logs/access.log" combined
<Directory  "C:/wwwroot/x/_my_logs/" >
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
    Satisfy all
</Directory>
</VirtualHost>

それから私はこれをしました -

<VirtualHost *:80>
    ServerName  dev.x.com
    ServerAlias dev.x.com
    DocumentRoot    "C:/wwwroot/x"
    Alias       /modules/    "C:/wwwroot/x/_my_modules/"
    ErrorLog    "C:/wwwroot/x/_my_logs/error.log"
    CustomLog   "C:/wwwroot/x/_my_logs/access.log" combined
    <Directory  "C:/wwwroot/x/_my_logs/" >
        Options FollowSymLinks
        AllowOverride All
        Order deny,allow
        Deny from all
        Satisfy all
    </Directory>

    RewriteEngine on

    # if requested URI is not a file and not a directory
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # externally redirect to /newLocation/{URI}
    # RewriteRule (.*) index.php?_req=$1 [L]

    # could use a redirect to a new directory --- 
    RewriteRule ^ /_mf_modules%{REQUEST_URI} [L,R=301]
</VirtualHost>

私の目的はこれでした。存在しなかった「ディレクトリ」リクエストを_my_modulesディレクトリ内のその名前のディレクトリに再ルーティングしたかったのです。

ファイルが存在しない場合は、_my_modules ディレクトリ内のその名前のディレクトリにリダイレクトしたいと考えていました。

したがって、www.x.com/xxx が URL で、「xxx」ディレクトリが存在しない場合、www.x.com/_my_modules/xxx にリダイレクトします。

同様に、www.x.com/xxx.php が要求された場合 - しかし xxx.php が存在しない場合、それらは www.x.com/_my_modules/xxx にリダイレクトされます

  • ただし(各ディレクトリにindex.phpがありますが)、常にeURLがこれにリダイレクトされます...

    要求された URL /modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/_my_modules/ がこのサーバーで見つかりませんでした.

だから私はうんざりして、vhostファイルを最初に必要なものに戻し、Apacheを再起動しましたが、まだリダイレクトされていて、動作を取り除くことはできません.

4

1 に答える 1

1

RewriteRules を<Directory>vhost 構成の環境に配置することで、.htaccess から VirtualHost 環境に移動できます。

あなたの場合、書き換えルールをカットアンドペーストしてみてください<Directory "C:/wwwroot/x/_my_logs/" >

本当にそれらを VirtualHost 環境に配置したい場合は、それらのパスを変更する必要があります: .htaccess 内の RewriteRules またはディレクトリに対して相対的であり、VirtualHost 内の RewriteRules はファイルシステムのルートまたは DocumentRoot に対して絶対的です。

rewritecond の例:

RewriteCond %{REQUEST_FILENAME} !-f

仮想ホストにある必要があります:

RewriteCond /your/documentroot/%{REQUEST_FILENAME} !-f

書き換えルールの例:

RewriteRule (.*) /your/documentroot/index.php?_req=$1 [L]

仮想ホストにある必要があります:

RewriteRule (.*) index.php?_req=$1 [L]
于 2012-08-11T07:24:28.300 に答える