2

我正在使用这个 htaccess 文件。除了第一个 RewriteRule 之外,一切都运行良好。当我打开 localhost/music/test/ 时,出现 404 not found 错误。当我打开 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>

注意:音乐目录在网站目录中

4

2 回答 2

1

我看不出 htacess 文件有什么问题,但是您可以让它将所有流向 music/test 的流量重定向到 music/a/b/ect

于 2012-04-20T17:40:32.563 回答
0

RewriteCond指令只影响第一个 immediate RewriteRule,所以你有 3 个条件:

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

仅适用于第一条规则:

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

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

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

如中,以. 并且不是 /。如果您希望它们也适用于其他规则,您还需要为您拥有的每个 RewriteRule 条目复制这些条件。

于 2012-04-20T18:04:23.240 回答