2010-07-05 85 views
0

我想將/anything.anyextension改寫爲/?post=anythinghtaccess重寫

如:

  • /this-is-a-post.php/?post=this-is-a-post
  • /this-is-a-post.html/?post=this-is-a-post甚至
  • /this-is-a-post//?post=this-is-a-post

我試圖

RewriteRule ^([a-zA-Z0-9_-]+)(|/|\.[a-z]{3,4})$ ?$1 [L] 

但它不起作用。

任何幫助表示讚賞。

回答

0

如果你有機會到主服務器的配置,使用此:

RewriteRule ^/(.+)\.\w+$ /?post=\1 [L] 

如果沒有,你不得不把這個在.htaccess文件,你可以嘗試

RewriteRule ^(.+)\.\w+$ /?post=\1 [L] 

在無論哪種情況,這都假設你只會用一個路徑組件重寫URL(例如,如果你得到像/path/anything.anyextension這樣的請求,它可能無法按預期工作,重寫規則將需要修改以處理該請求)

+0

這將無法趕上沒有擴展名的條目 – 2010-07-05 05:08:20

+0

@Ast:是的,這是所需的行爲。 – 2010-07-05 06:10:29

0

您需要更好的方法來確定何時應用重寫規則,否則您的頁面將無法顯示外部JS或CSS,除非您定義了異常。

SilverStripe(或核心,藍寶石)提供了一個很好的方法來此,是這樣的:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !(\.css)|(\.js)|(\.swf)$ [NC] 
RewriteCond %{REQUEST_URI} .+ 
RewriteRule ^([^\.]+) /?post=$1 [L,R=301] 

這就要求URI不能爲空,不要被JS,CSS或SWF,並重定向回到根目錄:

http://localhost/this-is-a-post.php 
http://localhost/?post=this-is-a-post 

如果你不想重定向,但加工,去除重定向規則R=301