2014-10-28 41 views
2

我知道所有PHP框架都使用路由。如何使用.htaccess重寫規則來模擬沒有框架的路由?

我的目標是使用沒有任何框架,路由技術: 例如: 而不必像的:

viewProfil.php?username=tom&id=10 

我想獲得的是

viewProfil/tom/10 

(任何數字獲取參數)

所以我可以掛在viewProfil.php

$username = $_GET[0]; 
$id = $_GET[1]; 

這樣的事情可能嗎?

回答

1

以下內容添加到您的.htaccess文件

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

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

然後,在php:

$params = explode('/', $_GET['q']);

+0

將與任何頁面這項工作?和任何數量的參數? – yarek 2014-10-28 19:06:17

+0

是的,你可以使用任何頁面(如果我理解正確) – 2014-10-28 19:17:18

1

您可以使用此

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^viewProfil/(.*)/([0-9]+)$ viewProfil.php?username=$1&id=$2 [L] 

爲了獲得更多的示例,請參閱本教程:Advanced .htaccess examples

+0

問題是路由**的任何數量的獲取參數** – anubhava 2014-10-28 17:43:58

+0

「任何數量的獲取參數」和任何頁面 – yarek 2014-10-28 19:04:24

-1

只要URL格式爲/viewProfil/n1/v1/n2/v2/n3/v3,您可以使用此遞歸規則使其路由任意數量的獲取參數

您可以在DOCUMENT_ROOT/.htaccess文件中使用此代碼:

RewriteEngine On 

# skip rewrites if it is a file/directory OR if file.php doesn't exist 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php !-f 
RewriteRule^- [L] 

# handle N name-value pairs in pretty URL 
RewriteRule ^([^/]+)/([^/]*)/([^/]*)(/.*)?$ /$1/$4?$2=$3 [L,QSA,NC] 
RewriteRule ^([^/]+)/?$ /$1.php [L,NC] 

這將路線:

/viewProfil/n1/v1/n2/v2/n3/v3/viewProfil.php?n3=v3&n2=v2&n1=v1

+0

我會很感激評論這裏downvote的原因! – anubhava 2014-10-28 18:34:36