关于NGNIX / HTCacess配置

about ngnix / htaccess config

提问人:Erdem KOÇHAN 提问时间:10/8/2023 更新时间:10/16/2023 访问量:20

问:

我需要获取路径的查询字符串末尾 所有路径定义一个 URL 变量

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]
.htaccess url 查询字符串

评论

1赞 redwards 10/8/2023
您使用的是 nginx 还是 apache?
0赞 Stephen Ostermiller 10/8/2023
Nginx 不使用文件,这些是 Apache 的东西。因此,如果您使用的是 nginx,则不应尝试使用 ..htaccess.htaccess

答:

0赞 arkascha 10/8/2023 #1

我希望您使用标志的实现能够按预期工作。一个简单的 htaccess 测试器证实了这一点(参见“新 url...”在底部)。因此,您可能想调查为什么您的测试结果不同......QSA

但是,还有其他方法,您也可以主动捕获查询字符串。apache 重写模块的文档清楚地表明,您需要一个来捕获请求的 URL 的查询字符串。RewriteCond

这可能会为您指明正确的方向:

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]

评论

0赞 Erdem KOÇHAN 10/8/2023
谢谢它的工作RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php?url=%{REQUEST_URI}&%{QUERY_STRING} [L]
0赞 Erdem KOÇHAN 10/16/2023 #2

感谢您的回复,它对 htacess 来说效果很好。我为 nginx 编写如下,它可以工作,但页面加载了两次。当我删除下面的配置时,它恢复正常。

注意:通过创建一个随机名称的文件,我能够理解该页面被加载了两次。

===nginx 配置 ===

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