如果只有一個參數可以有斜線,那麼通過指定正則表達式可以解決您的問題,其中只有一個捕獲組被允許斜線。例如:
^datavore/(?P<configuration>[\w\d\.\-_]+)/(?P<dataset>.*)/(?P<varname>[\w\d\.\-_]+)/(?P<region>[a-z-A-Z\_]+)/(?P<date_range>[\w\d\.\-_]+)/filelist/$
datavore/some-config/dataset/subdataset/varname/region/date-range/filelist/
將導致下一個值匹配的組:
datavore/some-config/dataset/subdataset/varname/region/date-range/filelist/
144 steps to match
configuration [9-20] `some-config`
dataset [21-39] `dataset/subdataset`
varname [40-47] `varname`
region [48-54] `region`
date_range [55-65] `date-range`
如果幾組能對他們有斜槓則沒有準確的方法來正確地匹配他們使用額外的文本withou路徑。有額外的文本示例解決路徑:
^datavore/__conf__/(?P<configuration>.*)/__dataset__/(?P<dataset>.*)/__varname__/(?P<varname>.*)/__region__/(?P<region>[a-z-A-Z\_]+)/__date_range__/(?P<date_range>.*)/filelist/$
670 steps to match
datavore/__conf__/conf/subconf/__dataset__/dataset/subdataset/__varname__/varname/subvarname/__region__/region/__date_range__/date-range/filelist/
configuration [18-30] `conf/subconf`
dataset [43-61] `dataset/subdataset`
varname [74-92] `varname/subvarname`
region [104-110] `region`
date_range [126-136] `date-range`
注意/__dataset__/
是使用的,而不是簡單的dataset
您可能需要用戶具有價值的數據集至極開始與dataset
本身。這將導致問題:
^datavore/conf/(?P<configuration>.*)/dataset/(?P<dataset>.*)/varname/(?P<varname>.*)/region/(?P<region>[a-z-A-Z\_]+)/date_range/(?P<date_range>.*)/filelist/$
datavore/conf/conf-val/dataset/dataset/dataset-val/varname/varname-val/subvarname-val/region/region-val/date_range/date-range-val/filelist/
654 steps to match
configuration [14-30] `conf-val/dataset` // THIS SEEMS TO BE WRONG. We wanted this to be `conf-val`
dataset [39-50] `dataset-val` // THIS SEEMS TO BE WRONG. We wanted this to be `dataset/dataset-val`
varname [59-85] `varname-val/subvarname-val`
region [93-103] `region-val`
date_range [115-129] `date-range-val`
實際的解決方案高度依賴於可能的值的捕獲組
如果您正在使用此路徑作爲API端點那麼我建議你只是轉儲這種做法,使用GET參數代替
在調用端用其編碼值('%2F')代替斜線可能會起作用,但我不確定URL匹配是在解碼URL之前還是之後完成的。最好的答案可能是避免使用可能包含文字斜槓的URL參數。您也可以將其從GET更改爲POST。 –
我測試了%2F,但它不工作,我不能真正改變/因爲這是它的索引,我想也許我應該在客戶端以base64格式編碼參數 – azelix