2010-09-13 60 views
0

當一個重寫規則允許我們用一個ID號製作友好的URL。這個故事只能通過身份證號碼,所以最後的文本並不重要。當任何文件/新聞/圖片/,它被重定向內聯以及限制重寫規則以排除特定的目錄

RewriteRule ^news/([0-9]+)$ /news/$1/ [R=301,L] 
RewriteRule ^news/([a-zA-Z0-9_-]+)/.*$ /news/story.php?id=$1 

我們的問題就來了。所以任何顯示來自/ news/images /的圖像都不起作用。

有人可以幫我嗎?我們如何限制重寫,以便它說:「如果它在/ images /子目錄中,不要重寫路徑」?

+0

其實,基本上我們要重寫規則說「如果是下面的任何目錄內/新聞/不重寫URL – Andelas 2010-09-13 06:03:48

回答

1

你可以走簡約路線,只是避免重寫文件是否存在:

RewriteRule ^news/([0-9]+)$ /news/$1/ [R=301,L] 

# Ignore the RewriteRule if the request points to a file 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond $1 !=tags [NC] 
RewriteRule ^news/([a-zA-Z0-9_-]+)/.*$ /news/story.php?id=$1 

或者,如果你想要做的目錄的情況下,檢查資源請求沒有指向一個真正的文件,而應該直接生成404響應,您可以嘗試以下方法:。

RewriteRule ^news/([0-9]+)$ /news/$1/ [R=301,L] 

# Check if the path segment after /news/ corresponds to an existing directory 
# and if so, don't perform the rewrite 
RewriteRule %{DOCUMENT_ROOT}/news/$1/ !-d 
RewriteCond $1 !=tags [NC] 
RewriteRule ^news/([a-zA-Z0-9_-]+)/.*$ /news/story.php?id=$1 
+0

謝謝Tim非常感謝你的第一個解決方案几乎完美地工作。我們遇到的最後一個問題是,我們也對我們的標籤進行了重寫,這些標籤發往/ news/tags /。所以我們需要確保URL是否有/ news/tags /不要重寫到story.php。 – Andelas 2010-09-13 07:23:02

+1

@scatteredbomb - 沒問題。爲了完整起見,我繼續編輯答案,並對該場景進行了額外的檢查,儘管在故事重寫之前使用「L」標誌重寫標籤也是第一種選擇的可能解決方案。 – 2010-09-13 07:37:08

+0

再次感謝。我希望我能給你更多的積分:)我非常感謝你的幫助。 – Andelas 2010-09-13 07:53:51