首頁>Program>source

我是htaccess的新手.我正在使用具有多个查詢字元串的網站。 我需要重寫不同查詢字元串的網址,例如:

  1. /path_to_website/file.php?product=var1&country=0&pag=1到/ path_to_website / var1 /
  2. /path_to_website/file.php?product=var1&country=0&pag=var2到/ path_to_website / var1 / var2
  3. /path_to_website/file.php?product=var1&country=var2&pag=1到/ path_to_website / var1 / var2 /
  4. /path_to_website/file.php?product=var1&country=var2&pag=var3到/ path_to_website / var1 / var2 / var3

如您所见,問题在於2到3个重寫之間,因為它们具有相同數量的引數(如果是這个問题).我已经在htaccess檔案上完成了此操作:

###BLOCK 1#######
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([^/]+)/$ /path_to_website/modules/file.php?product=$1&country=0&pag=1&rew=1 [L]
RewriteCond %{QUERY_STRING} ^(.*)=(.*)&country=0&pag=1$
RewriteCond %{QUERY_STRING} !^.*rew=1.*$
RewriteRule ^.*$ /path_to_website/%2/? [R=301,L]
###BLOCK 2#######
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([^/]+)/([^/]+)/$ /path_to_website/modules/file.php?product=$1&country=0&pag=$2&rew=1 [L]
RewriteCond %{QUERY_STRING} ^(.*)=(.*)&country=0&(.*)=(.*)$
RewriteCond %{QUERY_STRING} !^.*rew=1.*$
RewriteRule ^.*$ /path_to_website/%2/%4/? [R=301,L]
###BLOCK 3#######
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([^/]+)/([^/]+)/$ /path_to_website/modules/file.php?product=$1&country=$2&pag=1&rew=1 [L]
RewriteCond %{QUERY_STRING} ^(.*)=(.*)&(.*)=(.*)&pag=1$
RewriteCond %{QUERY_STRING} !^.*rew=1.*$
RewriteRule ^.*$ /path_to_website/%2/%4/? [R=301,L]
###BLOCK 4#######
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /path_to_website/modules/file.php?product=$1&country=$2&pag=$3&rew=1 [L]
RewriteCond %{QUERY_STRING} ^(.*)=(.*)&(.*)=(.*)&(.*)=(.*)$
RewriteCond %{QUERY_STRING} !^.*rew=1.*$
RewriteRule ^.*$ /path_to_website/%2/%4/%6/? [R=301,L]

我该如何解決? 因為除了我搜尋产品和国家/地區!= 0以外,其他所有方法都有效,因此引擎在第2塊停止。 請有人帮助我,因為我在這个問题上陷入困境。 非常感谢!

Edit

感谢@ RavinderSingh13的迴答.我尝試了您的規則,如下所示:

RewriteCond %{QUERY_STRING} ^$
############your rule###########
RewriteRule ^([\w-]+)/?$ file.php?product=$1&country=0&pag=1 [L]
RewriteCond %{QUERY_STRING} ^(.*)=(.*)&country=0&pag=1$
RewriteRule ^.*$ /path_to_website/%2/? [R=301,L]

此規則的重寫路徑為path_to_website / product /,但该頁面不適用於" ERR_TOO_MANy_REDIRECTS".我也只尝試了您的規則:

RewriteRule ^([\w-]+)/?$ file.php?product=$1&country=0&pag=1 [L]

在這種情况下,重寫根本不起作用,只需print查詢字元串即可.我還尝試了rew = 1键,如下所示:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([\w-]+)/?$ /aziende_agrarie/modules/risultato_ricerca.php? 
prodotto=$1&provincia=0&pag=1&rew=1 [L]
RewriteCond %{QUERY_STRING} ^(.*)=(.*)&provincia=0&pag=1$
RewriteCond %{QUERY_STRING} !^.*rew=1.*$
RewriteRule ^.*$ /aziende_agrarie/%2/? [R=301,L]

该重寫適用於path_to_website / product,但是当我在2上更改頁面時,瀏覽器URL為path_to_website / product /?product = var1&country = 0&pag = 2.因此,我插入了對product / 2 /的重寫,而對" file.php?product = var1&country = 0&pag = var2"的重寫是:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([\w-]+)/([\w-]+)(?!=/)$ /aziende_agrarie/modules/risultato_ricerca.php? 
prodotto=$1&provincia=0&pag=$2&rew=1 [L]
RewriteCond %{QUERY_STRING} ^(.*)=(.*)&provincia=0&(.*)=(.*)$
RewriteCond %{QUERY_STRING} !^.*rew=1.*$
RewriteRule ^.*$ /aziende_agrarie/%2/%4/? [R=301,L]

等等.我想念什麼吗? 非常感谢您的帮助:)

最新回復
  • 6月前
    1 #

    根据您顯示的示例,您可以尝試遵循.htaccess檔案中的規則集吗? 另外,請確保在測試URL之前先清除快取。

    RewriteEngine ON
    ##For file.php?product=var1&country=0&pag=1
    RewriteRule ^([\w-]+)/?$ file.php?product=$1&country=0&pag=1 [L]
    ##For file.php?product=var1&country=0&pag=var2
    RewriteRule ^([\w-]+)/([\w-]+)(?!=/)$ file.php?product=$1&country=0&pag=$2 [L]
    ##For file.php?product=var1&country=var2&pag=1
    RewriteRule ^([\w-]+)/([\w-]+)/$ file.php?product=$1&country=$2&pag=1 [L]
    ##for file.php?product=var1&country=var2&pag=var3
    RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)$ file.php?product=$1&country=$2&pag=$3 [L]
    

  • azure:在Databrick API 20中建立範圍-INVALID_PARAMETER_VALUE
  • java.util.scanner:从args讀取檔案時捕获錯誤(java)