簡體   English   中英

使用查詢字符串中的URL進行mod_rewrite

[英]mod_rewrite with URL in the query string

URL是查詢字符串的一部分時,我在使用mod_rewrite時遇到一些困難。

我當前的重寫規則是:

<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?action=$1 [L]
</IfModule>

這會將http://example.com/Controller/action&url=example.com重寫為http://example.com/index.php?action=Controller/action&url=example.com ,按預期方式運行,其中$_GET為:

Array
(
    [action] => Controller/action
    [url] => example.com
)

但是,我希望$_GET['url']包含http://和它自己的查詢字符串,例如http://example.com/?a=1&b=2 ,以便$_GET為:

Array
(
    [action] => Controller/action
    [url] => http://example.com/?a=1&b=2
)

我首先嘗試使用rawurlencode對(查詢字符串) URL進行rawurlencode

http://example.com/Controller/action&url=http%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2

但是,這會導致Apache錯誤:

未找到

在此服務器上找不到請求的URL / Controller / action&url = http://example.com/?a=1&b=2

我的第一個假設是已編碼的/ s違反了重寫規則,因此我將其刪除,從而修復了錯誤。 但是,這引起兩個問題。 主要的原因是查詢字符串中不再有任何/ s(因此URLhttp:example.com?a=1&b=2 ),第二個原因是對&進行了字面處理,並給出了$_GET值:

Array
(
    [action] => Controller/action
    [url] => http:example.com?a=1
    [b] => 2
)

如果有人知道如何解決這些問題,我將不勝感激。

澄清

值得指出的是,不管使用什么特定的查詢字符串,這都需要工作,例如$_GET可以是:

Array
(
    [action] => A/b/c/d
    [href] => https://test.com/Test/test?test=test
    [rhyme] => Jack & Jill
)

唯一的常數是它以/分隔的單詞列表開頭(例如/Controller/action/param1/param2/param3... )。 可選查詢字符串可以是任何值,例如&user_id=1&api_key=1234&optional_option_1=a&optional_option_2=b&url=...

因此,想象一下第三方訪問通過URL(例如, http//example.com/Dashboard/view,帶有他們選擇的自定義參數)訪問我們的網站的情況(因此,如果他們使用&name=Michael&age=25&uihfwiu=alrjnwvur ,它將顯示:

名字 :邁克爾

年齡 :25

uihfwiu :alrjnwvur

當前,唯一的問題是值包含/ s或& s時-不存在時按原樣可以正常工作。

經過長時間的討論,結果發現OP使用了錯誤編碼的URL。 正確編碼的URL應該是:

/Controller/action&url=http%253A%252F%252Fexample.com%252F%253Fa%253D1%2526b%253D2&name=Michael&age=25

好,問題解決了。 而不是&url=我需要?url= ,而mod_rewrite需要QSA標志:

http://example.com/Controller/action?url=http%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2

<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?action=$1 [L,QSA]
</IfModule>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM