2017-11-11 204 views
0
使用mod_rewrite

我有以下網址:PHP - 在Apache中

http://example.com/pages/page.php?company_name=Name

我想實現的是有這樣一個URL:

http://example.com/pages/Name

我已經嘗試了不同的規則但不起作用:

RewriteRule ^pages/([A-Za-z0-9-]+)/?$ /pages/page.php?company_name=$1 [NC] or 

RewriteRule ^pages/([^/]*)\.php$ /pages/page.php?company_name=$1 [L] 

它不起作用。它給了我一個「未找到」頁面。我該如何正確使用mod_rewrite?

回答

0

嘗試了這一點:

RewriteRule ^pages/([0-9a-zA-Z\-_]*)(/|)$ /pages/page.php?company_name=$1 [QSA,L] 

這會關心或不關心,如果該URL的末尾有斜槓:

http://example.com/pages/Name 
http://example.com/pages/Name/ 

,也將包括任何額外AGRS(QSA)如果頁面調用因爲它:

http://example.com/pages/Name/?more=stuff 

這應該工作,如果你的Apache有mod_rewrite和PHP存在你已經顯示。

UPDATE

如果你有一個不同的URL,它需要一個不同的PHP,例如 '藍頁':

http://example.com/bluepages/Name 

那麼這會工作爲:

RewriteRule ^bluepages/([0-9a-zA-Z\-_]*)(/|)$ /bluepages/somescript.php?some_var=$1 [QSA,L] 

如果您有多個你想要控制的這個,你可以在你的htaccess中爲每一個創建多個RewriteRules。但是,如果你只是想通配符話,那麼這將做一個盲目的包羅萬象(並導致大量的錯誤報告在Apache日誌):

RewriteRule ^([0-9a-zA-Z]*)/([0-9a-zA-Z\-_]*)(/|)$ /$1/page.php?some_var=$2 [QSA,L] 

你要麼必須是具體的,或者只是改變了一切。有很多方法可以配合使用,而且這取決於你的意圖。

+0

我試過上面的選項,但它仍然不起作用,仍然給我「未找到 在這臺服務器上沒有找到請求的URL /bluepages/Name.php我想知道文件夾結構的問題?因爲我有root/pages文件夾,我的.htaccess文件和剩餘的php文件位於這裏。謝謝 –

+0

以上內容適用於你提供的例子,如果你所做的不是你提供的內容,那麼我的答案將不起作用。提及現在的藍圖和根/頁面......所有這些東西都會起作用,應該已經添加到您的原始問題中 – IncredibleHat

+0

感謝您的更新,它現在可以工作了。根據您提供的內容,我會嘗試一些選項/場景並查看它給出的結果。再次感謝! –