2012-09-17 54 views
2

我在做我的網站更SEO工作友好的URL友好我目前使用的.htaccess的多變量

RewriteEngine On 
RewriteRule (.*)$ index.php?page=$1 

要打開site.co.uk/index.php?page=page_namesite.co.uk/page_name

我也想用這個子頁面太。 我已經試過這樣:

RewriteEngine On 
RewriteRule (.*)/(.*)$ index.php?page=$1&subpage=$2 

,但它不工作,它運行site.co.uk/page_name/sub_page,但是當你去site.co.uk/page_name返回找不到404。

我希望它運行site.co.uk/page_name並返回page_name

site.co.uk/page_name/sub_page,並返回sub_page

site.co.uk/page_name/sub_page/sub_page2/...

回答

7

只需使用:

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

很好,那麼你可以在你的腳本中路由請求。

用explode()分隔符分隔頁面變量,然後設置變量。

$route = explode('/',$_GET['page']); 

$page = isset($route[0]) ? $route[0] : null; 
$subpage = isset($route[1]) ? $route[1] : null; 
$yada = isset($route[2]) ? $route[2] : null; 

很多MVC框架都使用這種方法。它被稱爲路由。

+0

+1,因爲它是最簡單和最靈活的。你甚至可以通過解析REQUEST_URI來傳遞「page」。如果您有可瀏覽的目錄,請添加「RewriteCond%{REQUEST_FILENAME}!-d」。 – Robbie

+0

非常感謝你,我一直在爲這個問題挑選我的頭腦.htaccess是唯一不確定的東西。謝謝@Lawrence Cherone – MasterT

+0

即時通訊使用'RewriteRule ^(。*)$ $ 1.php'來隱藏exstention如何使用'RewriteRule ^(。*)$ index.php?page = $ 1 [L,QSA]'on一個名爲'portal.php'(帶有重寫規則的'portal')的頁面可以做同樣的事情,但是像它一樣('portal /'是頁面)和'RewriteRule ^(。*)$ index.php?page = $ 1 [L,QSA]'就像¬RewriteRule^(。*)$ portal /?page = $ 1 [L,QSA]'或類似的東西。 – MasterT