【问题标题】:Htaccess issue - url with multiple parametersHtaccess 问题 - 带有多个参数的 url
【发布时间】:2015-11-09 19:51:27
【问题描述】:

我将此 htaccess 用于银行、州、地区和分行等多个参数。 但它只格式化银行而不是其他...???
我需要它:
www.domain.com/bank/ .....(有效)
www.domain.com/bank/state/
www.domain.com/bank/state/district/
www.domain.com/bank/state/district/branch/

我的 htaccess:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /index\.php\?bank=([^&\s]+)
RewriteRule ^ /%2/? [L,R=301]
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /index\.php\?bank=   ([^&]+)&state=([^&]+)
RewriteRule ^ /%2/%3/? [L,R=301]
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /index\.php\?bank=([^&]+)&state=([^&]+)&district=([^&]+)
RewriteRule ^ /%2/%3/%4/? [L,R=301]
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /index\.php\?bank=([^&]+)&state=([^&]+)&district=([^&]+)&branch=([^&]+)
RewriteRule ^ /%2/%3/%4/%5/? [L,R=301]


# Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\.(.*)
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ index.php?/$1 [L]

请为此提供解决方案...谢谢和问候。

【问题讨论】:

    标签: .htaccess url-rewriting rewrite url-rewrite-module


    【解决方案1】:

    你需要调整你的正则表达式和重定向规则的反向顺序:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /index\.php\?bank=([^&\s]+)&state=([^&\s]+)&district=([^&\s]+)&branch=([^&\s]+)\s
    RewriteRule ^ /%2/%3/%4/%5/? [L,R=301]
    
    RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /index\.php\?bank=([^&\s]+)&state=([^&\s]+)&district=([^&\s]+)\s
    RewriteRule ^ /%2/%3/%4/? [L,R=301]
    
    RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /index\.php\?bank=   ([^&\s]+)&state=([^&\s]+)\s
    RewriteRule ^ /%2/%3/? [L,R=301]
    
    RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /index\.php\?bank=([^&\s]+)\s
    RewriteRule ^ /%2/? [L,R=301]
    
    # Redirect non-www to www
    RewriteCond %{HTTP_HOST} !^www\.(.+)$
    RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L,NE]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond $1 !^(index\.php|robots\.txt)
    RewriteRule ^(.*)$ index.php?/$1 [L]
    

    确保在测试此更改之前清除浏览器缓存。

    【讨论】:

    • 嗨,关于上述相同问题的另一个问题...重写 url 后我无法使用 $_REQUEST 访问值,所以我使用
    • 如果是POST 数据,那么它会在外部重定向后丢失。查看更新的答案。
    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 2014-10-04
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多