2012-12-15 18 views
0

在我的域example.com中,我想將所有頁面文件放在根目錄下,例如名爲的文件。因此,例如我把about.php文件目錄,並希望讓用戶與此URL訪問此頁:example.com/about
或例如把用戶目錄中的文件目錄,並把的login.php它,並希望讓用戶與訪問:example.com/user/login
其實我想刪除.PHP和文件從網址。apache mod重寫幾個條件來製作自定義URL

如果不存在這些文件,它應該像加載的index.php 根目錄的默認文件。例如URL example.com/blabla應該映射到的index.php

事實上,我希望有兩個條件,國防部重寫與所提到的優先

通知:當然我應該能夠在文件中使用像$ _ GET變量,如about.php

更新:在總結,它應該與此邏輯工作:

if the URI isn't a file or directory{ 
    if file/URI.php is a file 
     load file/URI.php 
    else 
     load index.php 
} 

有些身體給出了使用ErrorDocument 404 index.php的答案,但這是一個非常糟糕的主意(現在已經刪除了他的答案!)

感謝您的幫助...

回答

0

有條件的重寫(如果頁面存在)聽起來像一個糟糕而複雜的想法,如果它甚至是可能的。

我會重寫一切/index.php和控制一切從有:

  • 如果該URL會導致現有的頁面組件,使用/包括的內容;
  • 如果找不到有效頁面,請顯示您的原始索引內容。

實例重定向規則您的具體情況:

RewriteEngine on 
RewriteBase/

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^.*$ /index.php?id=$1 [QSA,L] 

將包括id請求的路徑和追加從原來的查詢字符串變量(QSA標誌)。

更具體的爲你/user/login例子是:

RewriteRule ^([\w-]+)/([\w-]+)$ /index.php?path=$1&file=$2 [QSA,L] 
  • [\ W-+]:任何單詞字符(包括_)和-
+0

好,我用的正是這種方法,但這種方式存在一些問題。例如,如問題中所述,那麼$ _GET變量將不會代表查詢字符串,並且應該使用手動解析,我不喜歡這樣做 – Aliweb

+0

@ali爲什麼$ _GET'不起作用?您可以將所有內容重寫爲'index.php?var1 = $ 1&var2 = $ 2&etc.'。 – jeroen

+0

$ _GET適用於index.php,但不適用於PHP語言在index.php文件中包含的file/pages/about.php。 – Aliweb