这就是我想要实现的目标:
浏览器请求:example.com/webApp/controller/action/?param1=param1value
webApp/
controller/action/?param1=param1value
。通常它由REQUEST_URI
(由不同数量的部分组成的路径)和QUERY_STRING
组成,它可以是任何东西,例如:
site/index/?page=2
books/index/?page=2&sort=name
users/list
foo/bar
user/profile/posts/?page=2
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
部分的网址时:
site/index/page/2
books/index/page/2/sort/name
users/list
foo/bar
user/profile/posts/page/2
基本上我想通过将所有QUERY_STRING
和?
字符替换为&
来清除网址的/
部分,并将其动态地附加到REQUEST_URI
我一直在做很多关于这个话题的搜索。不幸的是,最接近的匹配是硬编码QUERY_STRING
参数转换为路径的示例。相反,我希望动态地将所有QUERY_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]
唯一缺少的部分是清除QUERY_STRING
,如上所述。此外,如果请求URI是上面代码中列出的文件(扩展名列表),则不会通过index.php
处理。
答案 0 :(得分:0)
我已使用以下.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_STRING
不再附加在网址末尾(QSA
已移除RewriteRule
)。QUERY_STRING
与条件RewriteCond %{QUERY_STRING} ^(.*)=(.*) [OR]
匹配,后来在%1
中包含代币%2
和RewriteRule
时使用。GET
参数,但确保它们不会以path
参数结束。
&
而不是?
开头。?
已用于参数{{1 }}。path
"使用两次。至少这是我的假设..