簡體   English   中英

結合多個htaccess規則

[英]combining multiple htaccess rules

我有一個刪除.php擴展名的htaccess規則:

 `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規則重定向到stream.php文件:

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

這兩個規則都是單獨起作用的,但是結合使用后,下面的規則不起作用。

您有兩次相同的條件:

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM