我有一个删除 下面的htaccess规则重定向到 两个规则都可以单独使用,但合并后,下面的规则不起作用。.php
扩展名的 `RewriteEngine On
ErrorDocument 403 "Page not exist"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]`
stream.php
文件:`RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /core/musicbox/stream/?tag=$1 [NC,L,QSA]`
答案 0 :(得分:0)
你有两次相同的条件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
这意味着:
!-f
:文件%{REQUEST_FILENAME}
不存在。!-d
:目录%{REQUEST_FILENAME}
不存在。如果两者都为真,则下一个(在第一组规则中)也为真:
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
然后,下一条规则将执行301
重定向(R=301
)并停止处理规则(L
)。
RewriteRule (.*)$ /$1/ [R=301,L]
实际上,也许那里缺少^
。它应该是:
RewriteRule ^(.*)$ /$1/ [R=301,L]
无论如何,这意味着不会达到第二组条件和后续规则:
RewriteRule ^(.*)$ /core/musicbox/stream/?tag=$1 [NC,L,QSA]
您可能不需要首先R=301
和L
标记。我认为这应该是这样的:
RewriteEngine On
ErrorDocument 403 "Page not exist"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule ^(.*)$ /$1/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /core/musicbox/stream/?tag=$1 [NC,L,QSA]