.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
- 当用户在浏览器中看到没有
部分的URL时:index.php
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参数条目(因为它现在以
&
开始,而不是?
,?
已用于参数路径
)
- 第一篇文章中描述的情况导致查询字符串格式错误,因为“第一个参数字符
?
”被使用了两次。至少这是我的假设