2016-08-18 17 views
1

這裏就是我想要實現:的.htaccess重定向和美化查詢字符串

瀏覽器請求:example.com/webApp/controller/action/?param1=param1value

  • 凡靜態的(保持不變)的URL的一部分是webApp/
  • URL的動態部分爲controller/action/?param1=param1value。通常它由REQUEST_URI的(路徑包含不同部分的量)和QUERY_STRING,並且它可以是任何東西,例如:
    • site/index/?page=2
    • books/index/?page=2&sort=name
    • users/list
    • foo/bar
    • user/profile/posts/?page=2
  • 上面列出的URL應該像這樣的.htaccess後(什麼服務器接收):
    • index.php?path=site/index/page/2
    • index.php?path=books/index/page/2/sort/name
    • index.php?path=users/list
    • index.php?path=foo/bar
    • index.php?path=user/profile/posts/page/2
  • 當用戶看到網址不包含index.php部分在他們的瀏覽器中:
    • site/index/page/2
    • books/index/page/2/sort/name
    • users/list
    • foo/bar
    • user/profile/posts/page/2

基本上我想要更換所有?和清潔URL的QUERY_STRING部分字符與/並將其附加到REQUEST_URI動態。

我一直在做這個主題的很多搜索。不幸的是,最接近的匹配是硬編碼QUERY_STRING變成路徑的例子。相反,我想動態地將所有QUERY_STRING部件(如果有的話)變成路徑。

我現在的.htaccess文件內容如下:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.png|\.jpg|\.gif|\.jpeg|\.bmp|\.css|\.js)$ 
RewriteRule ^([^?]*)$ index.php?path=$1 [NC,L,QSA] 

唯一缺少的部分清潔QUERY_STRING,如上所述。此外,如果請求URI是上述代碼(擴展名列表)中列出的文件,則不會通過index.php進行處理。

回答

0

我已經部分通過使用下面的.htaccess代碼解決該問題:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.png|\.jpg|\.gif|\.jpeg|\.bmp|\.css|\.js)$ 

RewriteCond %{QUERY_STRING} ^(.*)=(.*) [OR] 
RewriteRule ^([^?]*)$ index.php?path=$1&%1=%2 [NC,L] 
  • QUERY_STRING在URL(QSARewriteRule移除)的端部不再追加。
  • 取而代之,QUERY_STRING與條件RewriteCond %{QUERY_STRING} ^(.*)=(.*) [OR]相匹配,隨後在RewriteRule中包括令牌%1%2
  • 此解決方案不是從URL中刪除GET參數,但它確實確保它們不會以path參數結束。
    • 相反,查詢字符串正常工作,並創建自己的GET參數項(因爲它現在&而不是?開始。?已經用於參數path
    • 第一哨引線描述的情形到因爲「第一個參數字符?」使用了兩次查詢字符串格式不正確的情況下,至少這是我的假設..
相關問題