【问题标题】:mod_rewrite query string with empty parametersmod_rewrite 带有空参数的查询字符串
【发布时间】:2015-06-09 18:18:12
【问题描述】:

所以我想在我的 .htaccess 文件中做一个 mod_rewrite 以便以下浏览器请求:

www.mysite.com/portal/v1/v2/v3

...将在php中重写和处理如下:

www.mysite.com/portal.php?n1=v1&n2=v2&n3=v3

这里需要注意的是,部分或全部 GET 变量可以为空,这意味着浏览器请求可以采用以下任何形式:

www.mysite.com/portal/v1/v2/v3
www.mysite.com/portal/v1/v2
www.mysite.com/portal/v1
www.mysite.com/portal

我可以在 php 文件中解决问题,但我应该为 .htaccess 使用什么代码?谢谢!

【问题讨论】:

    标签: php regex .htaccess mod-rewrite get


    【解决方案1】:

    在您的 /.htaccess 中试试这个

    RewriteEngine on
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    
    RewriteRule ^(.*)/(.*)/(.*)/?$ /portal.php?n1=$1&n2=$2&n3=$3 [QSA,L,NC]
    

    RewriteCond 确保如果请求已经针对文件或目录,则将跳过 RewriteRule。

    $1 $2 $3 指的是在RewriteRule 中匹配的模式。

    【讨论】:

      【解决方案2】:

      您可以在DOCUMENT_ROOT/.htaccess 文件中使用此代码:

      RewriteEngine On
      RewriteBase /
      
      RewriteCond %{REQUEST_FILENAME} -d [OR]
      RewriteCond %{REQUEST_FILENAME} -f
      RewriteRule ^ - [L]
      
      RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ portal.php?n1=$1&n2=$2&n3=$3 [QSA,L]
      
      RewriteRule ^([^/]+)/([^/]+)/?$ portal.php?n1=$1&n2=$2 [QSA,L]
      
      RewriteRule ^([^/]+)/?$ portal.php?n1=$1 [QSA,L]
      
      RewriteRule ^/?$ portal.php [L]
      

      【讨论】:

        猜你喜欢
        • 2012-08-30
        • 1970-01-01
        • 2013-02-06
        • 2014-01-28
        • 2013-12-25
        • 1970-01-01
        • 2010-12-02
        • 1970-01-01
        • 2016-07-10
        相关资源
        最近更新 更多