我是新來的。我在一個有多個查詢字符串的網站上工作。我需要重寫不同查詢字符串的URL,如:
- /指向網站的路徑/文件.php?product=var1&country=0&pag=1到/path_to_website/var1/
- /指向網站的路徑/文件.php?product=var1&country=0&pag=var2到/path_to_website/var1/var2
- /指向網站的路徑/文件.php?product=var1&country=var2&pag=1到/path_to_website/var1/var2/
- /指向網站的路徑/文件.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]
在這種情況下,重寫根本不起作用,只需打印查詢字符串。我還嘗試了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/?產品=var1&country=0&pag=2。因此,我為product/2/插入重寫,并為“文件.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]
等等。我錯過了什么?非常感謝您的幫助:)
根據您所展示的示例,請您在.htaccess文件中嘗試以下規則集。另外,請確保在測試URL之前清除緩存。