【问题标题】:mod rewrite rule to convert everything after domain to a get query stringmod重写规则将域之后的所有内容转换为获取查询字符串
【发布时间】:2026-01-19 19:25:01
【问题描述】:

我需要一些帮助来重写 htaccess 文件中的规则。我希望域之后的所有内容,在第一个斜杠之后被重写以获取查询字符串。

如果你看看mod rewrite everything after domain into get

这几乎是我想要的,只是我相信我的一条规则(重写文件以具有 php 扩展名)干扰了链接的解决方案。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

如何将链接解决方案也与此重写集成?

【问题讨论】:

标签: .htaccess mod-rewrite


【解决方案1】:
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?query=$1 [L]

英文版:如果文件或目录不存在,用$_GET['query']中的查询字符串重写为index.php。

为了获得更大的灵活性,您也不能使用 htaccess 将请求 uri 传递到 GET 中,而直接从 $_SERVER['REQUEST_URI'] 中读取它。

【讨论】:

  • 如果我添加斜线会弄乱网站的主要位置,因此没有 JS 或 CSS 加载...所以它不会将斜线放入查询字符串中
  • 它应该可以工作,我在发布该代码之前尝试过。假设目录或文件不存在,则将所有内容重写为 index.php;也许 PHP 方面有什么不好的预兆?