2013-02-18 41 views
0

我使用的.htaccess mod_rewite指令,並要完成2米不同的東西:結合的.htaccess重寫規則

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?unit=/$1 [PT,L] 

以上採用指定的URL,讓我直接就通過我的index.php引導頁。

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

以上使我的文件可以在不帶.php擴展名的情況下顯示。

使用此功能,我可以使用網址/module/function/setting指定一個文件,它包括引導頁面上的路徑以加載[root]/module/function/setting.php

我需要將兩個操作合併爲一個語句,有人可以幫忙嗎?

+0

這似乎不需要。請求'example.com/page.php'不正確。爲什麼不簡單地忽略「.php」,然後在腳本加載後追加它? '$ file = getenv('REQUEST_URI')。 '.php';'? (**注意**請確保你不只是包括基於原始URL的東西!) – Xeoncross 2013-02-18 17:00:13

+0

好吧,我明白了,是的,這是一個選項。出於興趣,您爲什麼選擇將REQUEST_URL設置爲環境變量?當然Env最適合靜態方面,如開發/生產狀態?我如何清理原始URL,我可以使用PHP過濾器嗎? – 2013-02-18 17:12:49

+0

'getenv()'函數允許您安全地訪問'$ _SERVER'變量,因爲Web服務器會自動設置它們。 '$ url = isset($ _ SERVER ['REQUEST_URI'])? $ _SERVER ['REQUEST_URI']:NULL;'vs'$ url = getenv('REQUEST_URI');' – Xeoncross 2013-02-18 19:47:54

回答

1

只要把第二個規則中的第一個前:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule^%{REQUEST_URI}.php [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?unit=/$1 [PT,L] 

所以htaccess的將檢查與名稱(不帶擴展名)的腳本存在,並執行它。如果不是,你的流動規則將被執行。

+0

這似乎沒有很大的區別,URL沒有得到.php補充​​。 – 2013-02-18 17:19:24

+0

鍵入example.com/foo不應該明顯改變,但應直接指向example.com/index.php/foo.php,example.com/foo/bar應轉至example.com/index.php/foo/bar.php - 我可以使用'$ _SERVER ['REQUEST_URI']'獲取index.php(bootstrap文件)上的/foo/bar.php並帶上這些內容 - 這樣我就可以設置變量並且有一個一致的方法來加載頁面 – 2013-02-18 17:57:04

+0

當瀏覽到example.com/foo/bar並使用print($ _ SERVER ['REQUEST_URI'])'我仍然得到/ foo/bar而不是/foo/bar.php,但也許更簡單的方法是隻需將.php附加到'$ _SERVER ['REQUEST_URI']'末尾,當我收到它? – 2013-02-18 18:05:37