【问题标题】:mod_rewrite: optional GET variables in URLmod_rewrite:URL 中的可选 GET 变量
【发布时间】:2016-02-03 13:53:50
【问题描述】:

所以我有这个 .htaccess 脚本,它接受一个带有 GET 变量的 URL,通常看起来像:

domain.com/index.php?PID=test&ID=test2

并允许使用这样的 URL 来隐藏 GET 变量的名称

domain.com/test/test2/

这是 .htaccess 脚本-

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !/$ %{REQUEST_URI}/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/([^/]+)/?$ index.php?PID=$1&ID=$2 [L,QSA]

RewriteRule ^([^/]+)/?$ index.php?PID=$1 [L,QSA]

它可以正常工作,允许传递 1 个或 2 个变量,但我需要一个传递 No 变量的实例,例如直接的域调用(例如 domain.com) ,但上面的规则是在没有变量的域(例如 domain.com//)之后添加额外的斜杠并导致重定向循环。默认情况下,我试图将用户转发到 domain.com/home/(这个在 PHP 脚本本身中处理)

if(!isset($_GET['PID']))
    {
     header("Location:home");
    }

任何帮助将不胜感激。试图理解 .htaccess 和 mod_rewrite 有点让人头疼……

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-redirection


    【解决方案1】:

    重定向发生是因为您设置的第一条规则。添加条件以排除仅请求服务器根的URL:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/?$
    RewriteRule !/$ %{REQUEST_URI}/ [L,R=301]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      相关资源
      最近更新 更多