.htaccess 关于ngnix / htaccess配置

8gsdolmq  于 2023-10-23  发布在  其他
关注(0)|答案(2)|浏览(89)

我需要得到路径的所有路径定义一个URL变量的querystring结束
www.root.com/path1/path2/path3/page?id=15&do=post
我可以得到变量的所有路径,但我不能得到查询字符串“id”和“do”
我的配置在这里

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
7vhp5slm

7vhp5slm1#

我希望你的QSA标志的实现能像预期的那样工作。一个简单的htaccess tester证实了这一点(见底部的“新的url.
然而,也有替代方案,你也可以主动捕获查询字符串。apache rewrite模块的文档明确指出,你需要一个RewriteCond来捕获请求URL的查询字符串。
这可能会为你指明正确的方向:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} ^id=(\d+)&do=(\w+)$
RewriteRule ^(.+)$ index.php?url=$1&id=%1&do=%2 [L]

这是一个简化的版本:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} ^id=(\d+)&do=(\w+)$
RewriteRule ^ index.php?url=%{REQUEST_URI}&id=%1&do=%2 [L]

或者更简单,如果这对你来说足够了,因为你根本不需要捕获查询字符串:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php?url=%{REQUEST_URI}&%{QUERY_STRING} [L]
taor4pac

taor4pac2#

感谢您的回复,它在htacess上运行得很好。我为nginx写了如下代码,它可以正常工作,但是页面加载了两次。当我删除下面的配置时,它恢复正常。
注意:我能够理解,通过创建一个随机名称的文件,页面被加载了两次。
=nginx配置=

location / {
     try_files $uri $uri/ /index.php?qs=$request_uri&$query_string$is_args$args;
 }

相关问题