2017-05-25 58 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]