我知道所有PHP框架都使用路由。如何使用.htaccess重寫規則來模擬沒有框架的路由?
我的目標是使用沒有任何框架,路由技術: 例如: 而不必像的:
viewProfil.php?username=tom&id=10
我想獲得的是
viewProfil/tom/10
(任何數字獲取參數)
所以我可以掛在viewProfil.php
$username = $_GET[0];
$id = $_GET[1];
這樣的事情可能嗎?
我知道所有PHP框架都使用路由。如何使用.htaccess重寫規則來模擬沒有框架的路由?
我的目標是使用沒有任何框架,路由技術: 例如: 而不必像的:
viewProfil.php?username=tom&id=10
我想獲得的是
viewProfil/tom/10
(任何數字獲取參數)
所以我可以掛在viewProfil.php
$username = $_GET[0];
$id = $_GET[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']);
您可以使用此
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^viewProfil/(.*)/([0-9]+)$ viewProfil.php?username=$1&id=$2 [L]
爲了獲得更多的示例,請參閱本教程:Advanced .htaccess examples
只要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
我會很感激評論這裏downvote的原因! – anubhava 2014-10-28 18:34:36
將與任何頁面這項工作?和任何數量的參數? – yarek 2014-10-28 19:06:17
是的,你可以使用任何頁面(如果我理解正確) – 2014-10-28 19:17:18