htaccess,一行不起作用

时间:2012-04-20 17:35:29

标签: apache .htaccess mod-rewrite

我正在使用这个htaccess文件。一切正常,除了第一个RewriteRule。 当我打开localhost / music / test /我收到404未找到错误。 当我打开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是否可以打破一行的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>

注意:音乐目录位于网站目录

2 个答案:

答案 0 :(得分:1)

我看不出htaccess文件有什么问题,但你可以让它将所有流向音乐/测试的流量重定向到音乐/ a / b /等

答案 1 :(得分:0)

RewriteCond指令仅影响第一个立即RewriteRule,因此您拥有3个条件:

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

仅适用于第一条规则:

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

所有其他规则都不受这3个条件的约束。第一条规则可能永远不会被应用的原因是因为您有条件:%{REQUEST_URI} !/$如果URI 以斜杠结尾,则说明。但规则本身要求URI以斜杠(^([^/]*)/$)结尾。我会假设你的条件在他们面前缺少一个^并且你的意思是:

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

中, 以。开头而不是/ 。如果您希望它们也应用于其他规则,您还需要为每个RewriteRule条目复制这些条件。