2012-10-25 179 views
1

我試圖遵循.htaccess short and friendly url的方向,但我無法實現這些結果。友好的URL的.htaccess

如果我用下面的正常工作:

RewriteEngine On 
RewriteRule ^([^/]*)\.html$ /index.php?page=$1 [L] 

但是,如果我使用:

RewriteEngine On 
RewriteRule ^([^/]*)$ /index.php?page=$1 [L] 

我收到內部服務器錯誤。

所有我想要實現的是能夠使用http://website.com/about,而不是http://website.com/about.html

+0

是頁面本身的.html或php被告知顯示爲html的 – MHowey

+0

重寫規則^ ([^ /] *)$ index.php?page = $ 1 [L]刪除index.php之前的「/」可能會解決您的問題。 – MHowey

+0

我有一個駐留在http://sample.com/index.php的頁面。 我通過將?page = home添加到它的末尾來將變量傳遞給它。 我希望能夠使用http://sample.com/home。 –

回答

2

這些規則:

RewriteEngine On 
RewriteRule ^([^/]*)$ /index.php?page=$1 [L] 

導致內部重寫循環。重寫引擎遍歷所有的規則,直到內部重定向已達到極限(從而導致500服務器錯誤)或導致URI出來的發動機的是,走進它的人一樣。此外(這是一個非常重要的概念),之前是在htaccess文件發送到重寫引擎規則的URI的前導斜槓被刪除。所以在這裏,我們有:

  1. 提出要求:http://domain.com/blah
  2. URI = /等等
  3. 條斜線,URI = 等等
  4. 等等匹配^([^/]*)$,規則被應用, URI = /index.php?page=blah
  5. 嗒嗒不等於的index.php
  6. 規則循環,URI = 的index.php
  7. 條斜線,URI = 的index.php
  8. 的index.php比賽^([^/]*)$,規則是施加的,URI = /index.php?page=index.php
  9. 索引不等於的index.php
  10. 規則循環,URI = 的index.php
  11. 條斜線,URI = 的index.php
  12. 的index.php匹配^([^/]*)$,施加規則,URI = 的index.php ?頁=的index.php
  13. 指數不等於的index.php

對於如何處理這個問題你有幾個選擇。所述simples是簡單地從目標移除/

RewriteRule ^([^/]*)$ index.php?page=$1 [L] 

這將使所以在上述步驟9中,索引將等於的index.php,從而停止重寫處理(前第二次得到應用)。唯一的缺點是如果你需要重定向,或者如果htaccess文件被移動,目標中的相對URI有時會被誤認爲文件路徑而不是URL路徑(apache猜測這個,有時候apache會猜測錯誤)。

RewriteBase/
RewriteRule ^([^/]*)$ index.php?page=$1 [L] 

您還可以添加條件,使它這樣的URL點到現有資源將排除得到應用這個規則:

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

因此,如果這可以通過包括底座固定URI指向一個現有的文件或目錄,該規則被跳過。因此,在第一次重寫之後,當URI變爲/index.php時,由於該文件存在,規則將第二次跳過。這也使得它在文檔根目錄中的圖像,CSS,腳本或靜態頁面的請求不會通過index.php路由。如果這不是你想要的,你也可以平出跳過如果URI已經是一個index.php文件:

RewriteCond %{REQUEST_URI} !^/index.php 
RewriteRule ^([^/]*)$ /index.php?page=$1 [L] 
+0

林不知道爲什麼我沒有收到電子郵件時,這是張貼。我將在今晚進行審查,以確認它能正常工作。 –

+0

然而,謝謝你,我仍然無法達到我期待的結果。 –