2011-09-22 58 views
0

htaccess的confilcting規則下面是衝突的規則爲兩個不同的文件

Options +FollowSymLinks 
RewriteEngine on 

# For www.domain.com it should go to my-index.php page 
# 
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC] 
RewriteRule ^(.*)$ my-index.php [NC,L] 

# For Accessing Division Page http://user1.domain.com/news/news-details.php 
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com [NC] 
RewriteCond %{HTTP_HOST) !^www\. 
RewriteRule ^news/news-details.php$ my-news.php?user=%1 [QSA,NC,L] 

# For Page URL http://www.domain.com/news/news-details.php 
# 
RewriteCond %{REQUEST_URI} ^/news/news\-details\.php [NC] 
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC] 
RewriteRule ^(.*)$ my-news.php [NC,QSA,L] 

# For Accessing Users Page 
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ 
RewriteRule ^$ /users.php?user=%1 [L] 

徵集新聞頁面和索引頁都去索引頁。我不知道爲什麼?

+0

真的 - 你應該顯示你的整個.htaccess內容..不僅僅是它的兩個規則。現在感覺就像一場遊戲:「猜猜看,猜猜爲什麼」。 – LazyOne

+0

我已編輯帖子,現在查看整個文件。 – HardCode

+0

「index page」是指'my-index.php'? – LazyOne

回答

2
  1. 規則的順序很重要 - 現在都提到的那些網址,將通過將其改寫爲my-index.php的第一條規則送達。 (爲my-index.php

  2. 你的第一條規則是過於寬泛 - 即使你把它放在正確的順序它仍然將它改寫爲my-index.php頁面 - 當你使用.*模式匹配一​​切。

考慮到上述嘗試這些規則:

Options +FollowSymLinks 
RewriteEngine On 

# For Page URL http://www.domain.com/news/news-details.php 
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC] 
RewriteRule ^news/news-details\.php$ /my-news.php [NC,QSA,L] 

# For Accessing Division Page http://user1.domain.com/news/news-details.php 
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com [NC] 
RewriteCond %{HTTP_HOST) !^www\. 
RewriteRule ^news/news-details\.php$ /my-news.php?user=%1 [QSA,NC,L] 

# For Accessing Users Page 
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ 
RewriteRule ^$ /users.php?user=%1 [L] 

# For www.domain.com it should go to my-index.php page 
# (but only if requested resource is not real file) 
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /my-index.php [L] 

我做了什麼:

  • 重新排列規則:移動my-index.php一個底部;
  • 增加了一個條件來不重寫對現有文件的請求(否則my-news.php也將被重寫)。

這些規則可能仍然需要一些調整 - 我不知道你有什麼樣的網站邏輯。

+0

這樣做的伎倆謝謝LazyOne – HardCode

相關問題