2013-04-03 61 views
0

刪除.PHP我正在尋找一種方式,而.PHP後無視一切從example.com/test.php/foo/bar

所以example.com/test.php/foo/bar會變得簡單地從URL中移除「.PHP」 example.com/test/foo/bar

然後在PHP模板中,我可以根據需要搜索並使用foo或bar。我發現刪除.php的所有內容都會干擾最終的變量。

UPDATE:通過從文件名中刪除.php,然後使用ForceType,我找到了一些成功。雖然它仍然會是很好,如果我能保持PHP擴展,所以我的代碼編輯器知道如何突出語法:)

<FilesMatch "^test$"> 
    ForceType application/x-httpd-php5 
</FilesMatch> 

更新2 這裏,我已經嘗試使用一些重寫規則一成功,但是當我添加一個尾隨斜線和一些內容後,它會導致500內部服務器錯誤

RewriteEngine On 
RewriteBase/
# remove .php; use THE_REQUEST to prevent infinite loops 
    RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP 
    RewriteRule (.*)\.php$ $1 [R=301] 
# remove index 
    RewriteRule (.*)/index$ $1/ [R=301] 
# remove slash if not directory 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} /$ 
    RewriteRule (.*)/ $1 [R=301] 
# add .php to access file, but don't redirect 
    RewriteCond %{REQUEST_FILENAME}.php -f 
    RewriteCond %{REQUEST_URI} !/$ 
    RewriteRule (.*) $1\.php [L] 
+0

'MultiViews'和PATH_INFO就足夠,或命名腳本SANS擴展和使用'ForceType'會爲好。否則,請詳細說明您試圖獲得任何建議的「RewriteRule」。 – mario

+0

我已經嘗試了幾種RewriteRules,它們都可以很好地用於刪除.php文件,其中有很多規則都是爲了這個目的而編寫的。但是他們都沒有忽略我以後的變量.php – daveJay

+0

ForceType可能工作。我會研究一下。不熟悉MultiView。 – daveJay

回答

2

你的最後一塊是幾乎沒有。但是,您需要更大的分類RewriteCond以使其可以使用可選的PATH_INFO。

即你需要的單詞字符從REQUEST_FILENAME/_URI第一匹配,並且然後測試類似名稱.PHP腳本的存在:

RewriteCond %{REQUEST_URI}   ^/(w+)/ 
RewriteCond %{DOCUMENT_ROOT}/%1.php -f 
RewriteRule ^(\w+)/(.+)$ $1.php/$2 [L] 

最後重寫規則取決於現有尾隨瓦爾。爲普通http://example.com/test請求添加一個不含PATH_INFO的通用規則塊。請注意,該特定集合僅適用於webroot中的xyz.php腳本。

+0

對不起,正則表達式對我來說非常混亂。我在下面添加了你的代碼,但這似乎沒有做任何事情。 – daveJay

0

請嘗試重新檢查這一點:

RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/([a-z0-9-_]+)/([a-z0-9-_]+)/?$ 
RewriteRule ^(.*) ^/%1.php/%2/%3 
+0

這似乎沒有做任何事情。而foo和bar僅僅是示例變量。我不能將它們硬寫入htaccess文件。 – daveJay

+0

如果'foo'和'bar'只是變量,嘗試重新檢查上面編輯的答案,如果它會給你一些提示。 – 5ervant