我正在使用这个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>
注意:音乐目录位于网站目录
内答案 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条目复制这些条件。