2011-07-31 54 views
2

我有以下.htaccess文件。.htaccess以下規則

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ 
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule ^awesomeslash/ /somepage.php [NC,PT]  
RewriteRule ^([^/\.]*)/?([^/\.]*)/?([^/\.]*)/?$ /template2.php?slash1=$1&slash2=$2&slash3=$3 [L] 

我已經運行到與規則的問題:

RewriteRule ^awesomeslash/ /somepage.php [NC,PT] 

當我去http://www.mysite.com/awesomeslash/

它不加載somepage.php相反,它是繼其下的運行,去template2.php

回答

3

首先:這沒有多大意義,如果你想重寫/awesomeslash//somepage.php

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule ^awesomeslash/ /somepage.php [NC,PT]  

RewriteRule ^([^/\.]*)/?([^/\.]*)/?([^/\.]*)/?$ /template2.php?slash1=$1&slash2=$2&slash3=$3 [L] 

我假設你想這個代替:

RewriteRule ^awesomeslash/ /somepage.php [NC,PT]  

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule ^([^/\.]*)/?([^/\.]*)/?([^/\.]*)/?$ /template2.php?slash1=$1&slash2=$2&slash3=$3 [L] 

其次:

  • 您需要L[NC,PT]旁邊的標記:[NC,PT,L] - 這將告訴Apache不要處理其他規則。
  • 您還需要在匹配模式結束時添加$以使規則僅匹配此URL而不匹配/awesomeslash/something-else

    RewriteRule ^awesomeslash/$ /somepage.php [NC,PT,L]

+0

感謝您的解釋和例子。這很好。 –

1

你必須在比賽結束時輸入$並添加L這樣的標誌:

RewriteRule ^awesomeslash/$ /somepage.php [L,NC,PT] 
3

我認爲給[NC,PT]加L應該可以解決它。

「[L]」標誌導致mod_rewrite停止處理規則集,在大多數情況下,這意味着如果規則匹配,則不會處理更多規則,這對應於Perl中的最後一個命令,或者斷點C中的命令。使用此標誌來指示當前規則應立即應用,而不考慮其他規則。「 http://httpd.apache.org/docs/current/rewrite/flags.html#flag_l