.htaccess重定向&;美化查询字符串

.htaccess重定向&;美化查询字符串,.htaccess,redirect,mod-rewrite,clean-urls,.htaccess,Redirect,Mod Rewrite,Clean Urls,以下是我努力实现的目标: 浏览器请求:example.com/webApp/controller/action/?param1=param1value 其中URL的静态(始终相同)部分是webApp/ 其中URL的动态部分是controller/action/?param1=param1value。通常它由REQUEST\u URI(路径由不同数量的部分组成)和QUERY\u STRING组成,可以是任何内容,例如: site/index/?page=2 book/index/?page=2

以下是我努力实现的目标:

浏览器请求:
example.com/webApp/controller/action/?param1=param1value

  • 其中URL的静态(始终相同)部分是
    webApp/
  • 其中URL的动态部分是
    controller/action/?param1=param1value
    。通常它由
    REQUEST\u URI
    (路径由不同数量的部分组成)和
    QUERY\u STRING
    组成,可以是任何内容,例如:
    • site/index/?page=2
    • book/index/?page=2&sort=name
    • 用户/列表
    • foo/bar
    • user/profile/posts/?page=2
  • 上面列出的URL在.htaccess(服务器接收的内容)之后应如下所示:
    • index.php?path=site/index/page/2
    • index.php?path=books/index/page/2/sort/name
    • index.php?path=users/list
    • index.php?path=foo/bar
    • index.php?path=user/profile/posts/page/2
  • 当用户在浏览器中看到没有
    index.php
    部分的URL时:
    • site/index/page/2
    • book/index/page/2/sort/name
    • 用户/列表
    • foo/bar
    • user/profile/posts/page/2
基本上,我希望通过将所有
&
字符替换为
/
来清理URL的
查询字符串
部分,并将其动态附加到
请求URI

关于这个话题,我做了很多搜索。不幸的是,最接近的匹配是硬编码
QUERY\u STRING
参数变为路径的示例。相反,我想动态地将所有
QUERY\u STRING
部分(如果有)转换为路径

我当前的.htaccess文件内容如下:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  !(\.png|\.jpg|\.gif|\.jpeg|\.bmp|\.css|\.js)$
RewriteRule ^([^?]*)$ index.php?path=$1 [NC,L,QSA]

唯一缺少的部分是清理
查询字符串
,如上所述。另外,如果请求URI是上面代码(扩展名列表)中列出的文件,则不会通过
index.php对其进行处理

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  !(\.png|\.jpg|\.gif|\.jpeg|\.bmp|\.css|\.js)$

RewriteCond %{QUERY_STRING} ^(.*)=(.*) [OR]
RewriteRule ^([^?]*)$ index.php?path=$1&%1=%2 [NC,L]
  • QUERY\u字符串
    不再附加在URL的末尾(
    QSA
    已从
    重写规则
    中删除)
  • 相反,
    QUERY\u STRING
    与条件
    RewriteCond%{QUERY\u STRING}^(.*)=(.*)或]
    相匹配,随后通过在
    重写规则中包含标记
    %1
    %2
    来使用
  • 此解决方案不会从URL中删除
    GET
    参数,但会确保它们不会以
    path
    参数结束。
    • 相反,查询字符串工作正常并创建自己的GET参数条目(因为它现在以
      &
      开始,而不是
      已用于参数
      路径
    • 第一篇文章中描述的情况导致查询字符串格式错误,因为“第一个参数字符
      ”被使用了两次。至少这是我的假设

我使用以下.htaccess代码部分解决了该问题:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  !(\.png|\.jpg|\.gif|\.jpeg|\.bmp|\.css|\.js)$

RewriteCond %{QUERY_STRING} ^(.*)=(.*) [OR]
RewriteRule ^([^?]*)$ index.php?path=$1&%1=%2 [NC,L]
  • QUERY\u字符串
    不再附加在URL的末尾(
    QSA
    已从
    重写规则
    中删除)
  • 相反,
    QUERY\u STRING
    与条件
    RewriteCond%{QUERY\u STRING}^(.*)=(.*)或]
    相匹配,随后通过在
    重写规则中包含标记
    %1
    %2
    来使用
  • 此解决方案不会从URL中删除
    GET
    参数,但会确保它们不会以
    path
    参数结束。
    • 相反,查询字符串工作正常并创建自己的GET参数条目(因为它现在以
      &
      开始,而不是
      已用于参数
      路径
    • 第一篇文章中描述的情况导致查询字符串格式错误,因为“第一个参数字符
      ”被使用了两次。至少这是我的假设