2011-06-03 24 views
7

在新項目中,網站有一組靜態html頁面。所有者需要將它們轉換爲動態的。 每個頁面都有:一個文本部分,一張小照片以及一些指向其他頁面的鏈接,與此相關。htaccess在沒有常見模式的網址上重寫

所有這些我可以放在數據庫中,並創建一個動態頁面(PHP)。

我的問題是,每個靜態頁面是唯一的 - 在URL中沒有常見的模式。目前有860個這樣的頁面。 我可以有一個網址,如:

folder1/folder2/item1.htm 
folder1/folder2/folder3/item2.htm 
folder1/folder2/folder2-fodler3/item3.htm 

這3到目前爲止(服務大約650網址從860的)最常見的模式。

每個文件夾名稱實際上是一個類別/子類別/關鍵字,我可以用它來確定我的項目的屬性。通常,前2個文件夾(folder1和folder2)是產品的類別和子類別,而下一個文件夾(文件夾3及其後的文件夾)確定該項目的部分(如果有)。 我希望這是有道理的。

所以,一個想到的是用舊的,靜態的,網址所提交的數據庫,並符合本服務的內容,是這樣的:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.*) /script.php?path=$1 [L] 

我認爲把這個規則在的盡頭我的重寫規則將確保所有其他重寫不受影響。

這種方法是可取的嗎?還有另外一種方法嗎?更健壯/安全/輕的東西?

+2

通過你的描述,該文件看起來小,相對結構良好。更長期的解決方案可能是解析文件,將值存儲在數據庫中,並將數據提供給動態頁面。這將使整個事情變得非常活躍,即內容和演示文稿很容易改變。 (嗯,我剛剛看到這不完全是一個新問題,無論如何) – 2011-10-15 13:59:28

回答

2

您所描述的方法是很常見和良好:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.*) /script.php?path=$1 [L] 

你可以在你的PHP腳本直接,這是更直接的解析的原始請求字符串減倉起來。查看您的服務器在$_SERVER PHP超全局數組中提供的服務,例如運行var_dump($_SERVER);。你已經找到的東西,是類似於您$_GET['path']你利用的,這是一般更可互操作的:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.*) /script.php [L] 

旁邊的是,根據Apache服務器的版本,它可以進一步的簡化爲:

FallbackResource /script.php 

這會讓您省去當前使用的RewriteCond的額外文件。

0

只使用

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^/script.php?path=$1 [L] 
+0

重寫規則沒有目標(除非你想將URI重寫爲'[L]') – 2012-10-03 01:56:10