2012-05-25 71 views
0

所以我想在PHP建立一個乾淨的URL系統改變像URL這樣http://example.com/index.php?projects=05到:http://example.com/projects/05用PHP清理網址

到目前爲止,我已經想通了如何使用parse_url URL映射看起來像http://example.com/index.php/projects/05但我不知道如何從URL中刪除'index.php'。有沒有辦法使用.htaccess從url字符串中刪除index.php

我知道這是一個簡單的問題,但廣泛的谷歌搜索後,我找不到解決方案。

回答

1

你需要在Apache中使用mod_rewrite來做到這一點。您需要將所有網址重定向到index.php,然後使用parse_url找出如何處理它們。

例如:

# Turn on the rewrite engine 
RewriteEngine On 

# Only redirect if the request is not for index.php 
RewriteCond %{REQUEST_URI} !^/index\.php 

# and the request is not for an actual file 
RewriteCond %{REQUEST_FILENAME} !-f 

# or an actual folder 
RewriteCond %{REQUEST_FILENAME} !-d 

# finally, rewrite (not redirect) to index.php 
RewriteRule .* index.php [L] 
+0

我無法找到一種方式來使用.htaccess自動重定向 - 你能提供一個例子嗎? – Thomas

0

我正在使用下面的.htaccess文件來刪除url的index.php部分。

# Turn on URL rewriting 
RewriteEngine On 

# Installation directory 
RewriteBase/

# Protect hidden files from being viewed 
<Files .*> 
    Order Deny,Allow 
    Deny From All 
</Files> 

# Allow any files or directories that exist to be displayed directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !favicon.ico$ 

RewriteRule .* index.php/$0 [PT] 

否則,我可以推薦Kohana的框架爲基準(他們也有一個相當不錯的URL解析器和控制系統)

0

像這樣的事情在你的.htaccess:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php [QSA,L] 

(請確保重寫模塊已啓用)

0

您應該使用國防部重寫的.htaccess中車削的index.php到/。

0

將實際文件/文件夾與URL解耦的概念稱爲路由。許多PHP框架都包含這種功能,主要使用mod_rewrite。在PHP URL Routing上有一篇很好的博文,它實現了一個簡單的獨立路由器類。

它創建這樣的映射:

mysite.com/projects/show/1 --> Projects::show(1) 

所以請求的URL導致類Projects的功能show()被調用,與1參數。

您可以使用它來構建漂亮URL的靈活映射到您的PHP代碼。