0

衝突我一直在努力用我的mod_rewrite了一段時間,我想我破解了......mod_rewrite的友好的URL與404

我CMS生成與post.php中的博客帖子的網址?S =我」我一直試圖刪除這部分網址,以便它們很好用戶友好。這裏是我的mod_rewrite:

<ifModule mod_rewrite.c> 

DirectoryIndex index.php index.html 

ErrorDocument 404 http://tempertemper.net/error.php 

RewriteEngine On 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

RewriteCond %{HTTP_HOST} ^www.tempertemper\.net$ 
RewriteCond %{REQUEST_URI} !cron.php 
RewriteRule ^(.*)$ http://tempertemper.net/$1 [R=301,L] 

RewriteCond %{QUERY_STRING} ^s=(.+)$ 
RewriteRule post.php /%1? [R=301,L] 

RewriteRule ^resources /archive? [R=301,L] 

RewriteCond %{REQUEST_URI} !post.php 
RewriteRule ^([a-zA-Z0-9_-]+)$ post.php?s=$1 

</ifModule> 

不幸的是,這似乎是指引未發現空白post.php中網頁,而不是error.php頁面的所有頁面。

我的網站是在這裏:http://tempertemper.net,這裏是不存在的http://tempertemper.net/this-url-does-not-exist

應該帶你到http://tempertemper.net/error

感謝您抽空看看:)

+0

什麼是沒有找到的頁面的例子? '/post.php?S = blahblah'? –

+0

嗨@Jon,CMS生成example.com/post.php?s=blahblah,我正在將它改寫爲example.com/blahblah – Martin

+0

但是它如何知道'blahblah'沒有找到? –

回答

0

因爲要重定向所有的URL適合[a-zA-Z0-9_-]+模式的路徑,這將簡單地發送到您的post.php腳本查詢字符串s=this-url-does-not-exist。所以這取決於你的PHP腳本post.php來檢查this-is-not-a-url是否存在,因爲Apache不可能知道哪些博客帖子ID值是有效的,哪些不是。

作爲一個附註,我建議使用/blog/2012-08-24-whatever作爲你給遊客的路徑,而不是/2012-08-24-whatever。這樣,您可以爲其他功能(例如/images)預留路徑,而無需在每次需要創建新實用程序路徑時在.htaccess文件中寫入新的異常。

+0

按照建議,我已將博客移動到其自己的文件夾中。謝謝。那麼所有不是現有網頁的東西都會被重定向?我想用它自己的.htaccess將博客移動到它自己的文件夾允許404在網站的其他部分工作。但我想最好是以某種方式爲博客重寫mod_rewrite。我有點失落......你如何從URL中刪除post.php?s =?我所追求的是所有博客文章的一種生成方式,可以從example.com/blog/post.php?s=nice-post重定向到example.com/blog/nice-post。感謝您的幫助@ user1515834 :) – Martin

+0

而這就是您所看到的。但是,由於用戶可以提供完全符合該模式的/博客/名稱,但是指的是不存在的文章,您需要修改您的PHP腳本以檢查名稱是否實際存在,如果不是,請告訴PHP腳本發出一個404頭和一條消息,向用戶解釋他們已經請求了一篇不存在的文章。 Apache無法知道哪些博客文章是由PHP從數據庫中提取的。 – Bobulous

+0

Gotcha。對不起,如果我的攝取速度有點慢 - mod_rewrites不是我的特長!感謝您的幫助:) – Martin