.htaccess RewriteRule 問題探究

這兩天遇到一個問題,就是把 .htaccess  放入可是,並無效果。 php

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
 # Redirect www to non-www   
RewriteCond %{HTTP_HOST} ^www\.(.*)   
RewriteRule (.*) http://%1/$1 [R=301,L]  
 
#RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f [NC] 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
 
RewriteRule ^sitemap.xml$ sitemap.php [L]
 
# Redirect www to non-www   
#RewriteCond %{HTTP_HOST} ^www\.(.*)   
#RewriteRule (.*) http://%1/$1 [R=301,L]  
 
</IfModule>
 
# END WordPress
 
上面的文件放入 阿里雲的根目錄 無效?! 
WTF,找不到緣由。
 
由於全部的重寫規則都沒有錯, 可是就是 sitemap.xml 沒法跳轉到 sitemap.php 
 
RewriteRule ^sitemap.xml$ sitemap.php [L] 
位置提到
RewriteRule . /index.php [L]  
 
就好了。  
 
 
RewriteRule ^sitemap.xml$ sitemap.php [L] 
提到RewriteEngine On 以前,巴特,這樣作是不能夠的。 
後來發現提到 
RewriteBase /
以後就能夠了。 
 
網上關於這幾句是這麼說的
  1. RewriteEngine On #要想rewrite起做用,必需要寫上哦
  2. RewriteBase url-path #設定基準目錄,例如但願對根目錄下的文件rewrtie,就是」/」
  3. RewriteCond test-string condPattern #寫在RewriteRule以前,能夠有一或N條,用於測試rewrite的匹配條件,具體怎麼寫,後面會詳細說到。
  4. RewriteRule Pattern Substitution #規則
 
RewriteEngine On  表示打開rewrite 
RewriteBase / 重寫根目錄
 
可是到底是什麼緣由致使了 
RewriteRule ^sitemap.xml$ sitemap.php [L]  
 
無效呢?
原來 
. ----------符號表示除了換行符外的全部字符。
那麼 RewriteRule . /index.php [L]  就是
先執行會把 {HOST}/sitemap.xml 解析成{HOST}/sitemap.xml/index.php 
然而並無這個文件夾,因此就404了 。
因此應該把   
RewriteRule ^sitemap.xml$ sitemap.php 提早。就OK了
相關文章
相關標籤/搜索