2017-05-25 37 views
0

我有一个htaccess的规则,删除.php扩展:组合多个htaccess的规则

stream.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]` 

下面的htaccess的规则重定向:

`RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /core/musicbox/stream/?tag=$1 [NC,L,QSA]` 

两个规则的作品分别,但是当组合时,下面的规则不起作用。

+0

有没有人解决你的问题?如果是这样,请您接受最好的答案(点击下面的选中标记)。这将有助于其他遇到您的问题的用户迅速找到接受的答案,并且还会给出15个代表。指向作者(: – Danziger

回答

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=301L标志。我认为这应该是这样的:

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]