2

私はこのhtaccessファイルを使用しています。最初のRewriteRuleを除いて、すべてが正常に機能しています。localhost / music / test /を開くと、404notfoundエラーが発生します。localhost /music/またはlocalhost/music / a / b / etc /を開くと、正常に動作します。

私がここで間違っていることを誰かが知っていますか?

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !/$

RewriteRule ^([^/]*)/$ /music/index.php?id=$1 [NC,L,QSA]
RewriteRule ^([^/]*)/([^/]*)/$ /music/index.php?id=$1&sid=$2 [NC,L,QSA]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/$ /music/index.php?id=$1&sid=$2&tid=$3 [NC,L,QSA]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /music/index.php?id=$1&sid=$2&tid=$3&fid=$4 [NC,L,QSA]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /music/index.php?id=$1&sid=$2&tid=$3&fid=$4&fiid=$5 [NC,L,QSA]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /music/index.php?id=$1&sid=$2&tid=$3&fid=$4&fiid=$5&siid=$6 [NC,L,QSA]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /music/index.php?id=$1&sid=$2&tid=$3&fid=$4&fiid=$5&siid=$6&seid=$7 [NC,L,QSA]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /music/index.php?id=$1&sid=$2&tid=$3&fid=$4&fiid=$5&siid=$6&seid=$7&eiid=$8 [NC,L,QSA]

apache confまたはvirtualhostは1行のhtaccesファイルを壊すことができますか?

apache confはデフォルトのconfです(apt-get apache2)

仮想ホストファイル

<VirtualHost *:80>
    ServerAdmin wouter1994_67@hotmail.com
    ServerName sites
    DocumentRoot /var/www/sites
    <Directory /var/www/sites>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

注:音楽ディレクトリはサイトディレクトリ内にあります

4

2 に答える 2

1

htacessファイルに問題はありませんが、music/testに向かうすべてのトラフィックをmusic/a / b/ectにリダイレクトするようにできます。

于 2012-04-20T17:40:32.563 に答える
0

RewriteCondディレクティブは最初のイミディエートRewriteRuleにのみ影響するため、次の3つの条件があります。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !/$

最初のルールにのみ適用されます:

RewriteRule ^([^/]*)/$ /music/index.php?id=$1 [NC,L,QSA]

そして、他のすべてのルールは、これらの3つの条件に拘束されません。最初のルールがおそらく適用されない理由は、URIがスラッシュで終わっていないかどうかを示す条件%{REQUEST_URI} !/$あるためです。ただし、ルール自体では、URIがスラッシュ()で終わる必要があり^([^/]*)/$ます。私はあなたの条件が^それらの前に欠けているとあなたが意味したと仮定するつもりです:

RewriteCond %{REQUEST_URI} !^\..+$
RewriteCond %{REQUEST_URI} !^/$

のように、で始まりませ/ではありません。他のルールにも適用したい場合は、持っているRewriteRuleエントリごとにこれらの条件を複製することもできます。

于 2012-04-20T18:04:23.240 に答える