2011-04-08 43 views
1

這是我想達到的目標:需要用的.htaccess幫助隱藏PHP擴展,但在某些特定條件

www.mydomain.com/pages/23/page-title-hash-here -> www.mydomain.com/pages.php/23 
www.mydomain.com/[otherpages] -> www.mydomain.com/[otherpages].php 
www.mydomain.com/[otherpages]/ -> www.mydomain.com/[otherpages].php 

本質,但是也有一些僅由文件名(www.mydomain.com/contact or www.mydomain.com/faq)查詢,然後有一些簡單的網頁是我通過使用pages.php/23/fdjsoipfahsd or products.php/54/gf-dsdfs-a-f來引用的頁面,然後我使用$_SERVER['REQUEST_URI'] var來解析.php之後的所有內容,並檢索產品ID或頁面ID等。並且這些頁面有很多變體。

If我需要對每個.php文件名進行硬編碼,我也可以這樣做 - 我們贏了將不再增加。然而沒有任何痕跡的人仍然應該工作。

回答

2

你爲什麼不直接使用:

RewriteEngine On 
Options +MultiViews 

如果我的理解是正確的,它應該工作。 試試吧。

+0

哦,至今它的作用就像一個奇蹟。天才!我會進一步測試以確認,然後分出積分! – jeffkee 2011-04-18 23:37:44

1

您可以嘗試以下操作。它忽略對存在的文件的請求(例如'/images/image.jpg'將不受影響),對於那些不存在的文件,它會嘗試將「.php」添加到第一個「目錄」元素,如只要該'目錄'只包含字母數字字符。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^/([\w-]*)/?$ /$1.php [L] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^/([\w-]*)/(.*)$ /$1.php/$2 [L] 
  • /測試/ fred的/去 - > /test.php/fred/go
  • /images/image.jpg - 名> /images/image.jpg(假設該文件存在)
  • /script.php/request/thing - > /script.php/request/thing(因爲開口 '目錄' 中有一個點)
  • /測試 - > /test.php
+0

似乎到目前爲止是工作。我會進一步測試... – jeffkee 2011-04-08 17:27:00

+0

如果我需要允許文件中帶破折號( - )和下劃線(_)的文件,該怎麼辦?如about-us或contact-us轉到about-us.php和contact-us.php? – jeffkee 2011-04-11 22:25:04

+0

我已經更新了上面的規則,允許「 - 」和「_」成爲初始'目錄'的一部分。 – 2011-04-12 00:37:32

1

嘗試這將幫助您達到您的要求:

RewriteEngine on 

RewriteCond %{REQUEST_URI} \/(pages|products)\/(.*) 
RewriteRule (.*)$ %1.php/%2 [L] 

RewriteCond %{REQUEST_URI} \/([a-z]+)([\/]?) 
RewriteRule (.*)$ %1.php [L] 
1
RewriteEngine On 
RewriteCond $1 !(.*\.php)$ 
RewriteRule ^/([^/]+)/?$ /$1.php 
RewriteCond $1 !(.*\.php)$ 
RewriteRule ^/([^/]+)/(.+)$ /$1.php/$2 [R=301] 

這些規則重寫只有當文件不與.PHP結束。然後在第二種情況下,我使用.php文件設置了一個重定向301,就像在php文件中獲取請求部分一樣。如果沒有R參數,腳本將找不到.php,並且您的請求字符串將爲空,並且會顯示默認頁面(如果我是正確的)。

+0

同樣的事情... http://picnetbc.sonikastudios.com/surveillance-research.php和http://picnetbc.sonikastudios.com/surveillance-research shoudl都可以工作,但事實並非如此。 – jeffkee 2011-04-15 21:26:13

+0

查看更新的答案。這是在我的本地機器上工作。 – 2011-04-16 12:08:07

1

嘗試以下

  1. 重寫規則^ /頁/([^ /] +)/([^ /] +)/ $ /pages.php/$1
  2. 的RewriteRule^/(。 *)$ /$1.php
  3. RewriteRule^/(。*)/ $/$ 1。PHP