2012-10-25 111 views
1

這一直困擾着我一段時間。我的網站上有一些使用PHP切換案例來更改頁面內容的頁面。我遇到的問題是這些網頁的網址不是很友善。無法更改PHP開關案例URL

我想改變這個 :

http://www.abcprintingink.com/printing.php?page=print-and-mail

這樣:

http://www.abcprintingink.com/printing.php/print-and-mail或更好

http://www.abcprintingink.com/printing/print-and-mail

我試過的.htaccess並沒有什麼作品。以下是我在.htaccess已經試過:

RewriteEngine On 
#RewriteRule ^web.php/([^-]*)$ /web.php?page=$1 [QSA] 

#RewriteRule ^/web.php/?page\=(.*)$ /web.php?page=$1 [l] 

RewriteRule ^web.php/(.*)$ /web.php?page=$1 [l] 

RewriteRule ^web.php/([a-zA-Z0-9\-/\.]+)/?$ web.php?page=$1 [L] 

在.htaccess工作的其他命令,所以我知道它不是文件或Web服務器。

這是printing.php

<?php 
     /* SEO Switch Statements */ 
     $pagename = "printing"; 
     $page = htmlspecialchars($_GET["page"]); 

     switch ($page) { 
case 'print-and-mail': 
       $page_title = 'page title'; 
       $page_description = 'page desc'; 
       $page_nav_active = 'print-and-mail'; 
       $page_content_copy = 'page text'; 
       $template_slider_image = 'image'; 
       break; 
} 
?> 

switch語句此外,這是鏈接的網頁菜單後面的腳本。你可以嘗試

<?php $menu=count($navigation); for ($i=0; $i<$menu; $i++) 
{ echo '<div><li class="navigation"><a href="?page='.$navigation[$i].'">' 
.$replaced = str_replace("-", " ", $navigation[$i]).'</a></li></div>'; } ?> 
+0

你是說這些鏈接不工作(404大概),或者他們確實工作,PHP的switch語句沒有接收GET中的值嗎? (所以頁面顯示錯誤的內容)? –

+0

哦,不,他們工作正常。它只是像「webpage.php?page = content-page」這樣的URL顯示,無論在.htaccess文件中有重寫規則,我都無法讓它們以不同的方式顯示。 –

+0

如果有幫助我在導航菜單中有這樣的代碼<?php $ menu = count($ navigation); for($ i = 0; $ i <$ menu; $ i ++){ \t \t \t \t echo'

'; \t \t \t \t \t}?> –

回答

1
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+) - [PT,L] 

## 301 redirect, http://www.abcprintingink.com/printing.php?page=print-and-mail 
## to http://www.abcprintingink.com/printing/print-and-mail 
RewriteCond %{QUERY_STRING} ^page=(.*)$ 
RewriteRule ^printing\.php$ /printing/%1? [R=301,L] 

## makes /printing/print-and-mail actually work 
RewriteRule ^printing/(.*)$ /printing\.php?page=$1 [L,QSA] 
+0

我仍然無法讓它工作。我把這個重寫規則放進去,甚至當我直接鍵入url時,它會返回一個404錯誤。 –

+0

@SpyderTech你的根網站文件夾中是否有一個名爲printing.php的文件? –

+0

是的,我這樣做,那是保存開關case語句的文件 –

0

一種可能性是將所有信息到一個核心文件,如index.php文件,然後從他們的

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

投放正確的數據解析中的index.php,然後要麼URL通過包含語句引入數據並填充$ _GET數組或調用模板並填充數據庫中的變量。

這將是我會這樣做的方式 - 可能花了數週試圖獲得正確的表達正確。 主要是因爲正則表達式和htaccess很少做我想讓他們做的事(我自己的限制,而不是正則表達式)。

+0

.htaccess重寫選項的工作,但我沒有考慮解析url。謝謝。 –