2014-09-28 122 views
2

我想轉換此:URL重寫返回500內部服務器錯誤

site/read.php?id=6

site/read/6

我已經試過一對夫婦SO找到解決方案,與上次一個(輸出:site/read/id/6): RewriteRule ^(.*?\.php)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N,QSA]

當我嘗試第二個鏈接時,它會掛起,並且apache崩潰(LOL)。

不知道是否有.htaccess文件的剩餘部分的問題,所以這裏是全碼:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 
RewriteRule ^(.*?\.php)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N,QSA] 

我可以實現(與行1-4),沒有PHP擴展顯示因此地址欄目前顯示爲site/read?id=6

請問您能指出我哪裏出錯了嗎?

+0

這就是所謂的URL路由。我認爲這樣做的最好也是最簡單的方法是使用一些框架,比如'Codeigniter'或'Laravel'。但是你可以自己動手,不用任何帶有一點搜索的框架:http://blogs.shephertz.com/2014/05/21/how-to-implement-url-routing-in-php/ – Sky 2014-09-28 22:13:04

回答

1

你可以把這段代碼在你的htaccess的(這必須是在根文件夾)

Options -MultiViews 
RewriteEngine On 

RewriteCond %{THE_REQUEST} \s/read\.php\?id=([0-9]+)\s [NC] 
RewriteRule . /read/%1? [R=301,L] 

RewriteRule ^read/([0-9]+)$ /read.php?id=$1 [L] 
+0

謝謝Justin,它當我一次嘗試全部使用它時,它並不適用於我,但是如果我僅添加最後一行,它就完全符合我的要求。另外,爲了將來參考,可能需要使用此方法更改CSS路徑。 – 2014-09-29 08:57:39

-1

我會在PHP中執行此操作,調試Apache正在獲取的內容非常困難,它可能會進入無限循環,您是否在apache日誌文件中發現任何內容? 但是,如果您使用的是框架,那麼請保存自己的麻煩並且在PHP中執行此操作,否則很容易引發一個檢查此問題的PHP,並在檢測到url中的.php時重定向到新頁面。

相關問題