2013-06-05 86 views
0

我認爲我正在嘗試實現不可能的結果。重寫包含點的URL參數

該場景是PURL郵件,我已經有一些URL被重寫,以適應發送給客戶的URL。

客戶通過以下域進入站點:http://domain.com/用戶名

的可變用戶名表示GET-變量,該變量相當於http://domain.com/index.php?user=用戶名

我實現這與以下重寫規則:

RewriteBase/

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?name=$1 [QSA] 
#This works perfect and translates to http://domain.com/UserName 

RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?name=$1 [L] 
#This achieves the goal but does not reflect in the URI I want: 
#http://domain.com/UserName 

走得更遠,也有包含在名稱的點狀A.Jackson一些名字也需要被視爲用戶名。由於這些只有13名我可以手動實施它們。我不知道的是,我可以如何防止將作爲文件擴展名處理後的部分。有沒有辦法在* mod_rewrite *中爲這些編寫自定義句柄? 如果是這樣,任何人都可以向我解釋如何?

在此先感謝和問候!

+0

添加圓點,您正則表達式'[A-ZA-Z0-9_-在網頁中使用的任何其他環節的完整路徑。 ]' – Robert

+0

嘿羅伯特,謝謝,但這會導致內部服務器錯誤。不適合我! – codedrop

+1

由於點需要用\ – Robert

回答

2

OK試試下面

 

    RewriteCond %{REQUEST_FILENAME} !(img|anyother folders that you want to ignore|anyother folders that you want to ignore|...) 
    RewriteCond %{SCRIPT_FILENAME} !-f 
    RewriteRule ^([a-zA-Z0-9_-]*[\.]*[a-zA-Z0-9_-]+)[/]*$ test.php?name=$1 [L] 

替換要忽略文件夾名稱「要忽略任何其它文件夾」。用'|'分隔每個文件夾

您還可以提供對CSS,圖像或當您使用URL重寫功能

+0

完美答案!多謝您的支持! :) – codedrop

2

這是你的修復

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^([a-zA-Z0-9_-]*[\.]*[a-zA-Z0-9_-]+)$ index.php?name=$1 [L] 
+0

轉義,非常感謝。這適用於我!執行卓越! – codedrop

+0

更進一步:是否可以使用可選的尾部斜線?像:http://www.jetztzuprimagas.de/A.Armbruster/ – codedrop

+1

而不是RewriteRule ^([a-zA-Z0-9 _-] * [\。] * [a-zA-Z0-9 _-] +) $ index.php?name = $ 1 [L]使用RewriteRule ^([a-zA-Z0-9 _-] * [\。] * [a-zA-Z0-9 _-] +)[/] * $ test。 php?name = $ 1 [L] – Lepanto