2009-10-17 104 views
2

我正在使用cms將靜態網站轉換爲一個靜態網站。 我有安裝在公共目錄的子目錄中的cms。爲了避免與醜陋的域名(http://example.com/cms/)結束了有一個簡單的方法使用mod_rewrite重寫http://example.com/ ...http://example.com/cms/ ...同時確保,如果該請求將不會在404結束,沒有重定向。僅當404發生時才使用mod_rewrite

一個例子:

/ 
/cms/index.html 
/cms/file.dat 
/file.dat 

如果用戶請求/index.html,他們應該重定向到/cms/index.html,但如果他們要求/file.dat,他們不應該重定向到/cms/file.dat因爲該文件在要求地方

EDIT存在 感謝您的答案。

+1

確保如果'/ CMS/index.html'不是預期的頁面,你的服務器實際上返回一個404響應。它可能用於'/ index.html',但不適用於'/ fil.dat' – Macha 2009-10-17 19:26:29

回答

5

您可以使用RewriteCond Directive來檢查是否存在與請求的URL相對應的現有文件,並且只有在沒有文件時才重新寫入CMS。

下面是一個簡單的例子:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php 

如果沒有現有的文件相對應的請求的URL,然後該請求被改寫爲index.php

您可能還需要檢查符號鏈接和/或目錄,順便說一句...
舉例來說,這裏是一個possibility that can be used when setting up a Zend Framework project

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

(即使它鏈接到ZF,它應該是相當多的項目OK)

2

試試這個規則:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule !^cms/ cms%{REQUEST_URI} [L] 
相關問題