【问题标题】:htaccess to rewrite uri into get if not file/folder如果不是文件/文件夹,htaccess 将 uri 重写为 get
【发布时间】:2026-01-16 15:05:02
【问题描述】:

如果不是针对现有文件或文件夹,我需要将 uri 重写为 get 变量的 htaccess 规则。 示例:

www.example.com/page1.php -> goto page1.php
www.example.com/page2.html -> goto page2.html
www.example.com/folder -> goto /folder
www.example.com/some_string_value -> rewrite as /default.php?value=some_string_value

【问题讨论】:

  • 您可能必须在代码中处理此问题并根据需要进行重定向。 Htaccess 不知道这是 404 还是 200。它只是按照您的意愿路由它。
  • 如果我被认为是粗鲁或精英,我深表歉意,但这不是一个请求论坛。您需要向社区展示您已尝试进行研究并且您正在发布因为您无法理解/理解正在发生的事情。在这里简单地说“我需要 x”是行不通的。对不起。

标签: apache .htaccess url-rewriting


【解决方案1】:

这确实是一个非常普遍的要求。在这个网站上可能有 1000 个关于此的问题。您需要使用RewriteCondREQUEST_FILENAME 来查找不存在的文件夹,然后在内部重写以获取变量。本质上,如果它是404 (non existent URI),它将被路由到您的 default.php 文件。漂亮的 URL 就是这样完成的。您可以将其放在根目录下的 .htaccess 文件中。

RewriteEngine On
#prevent the use of the default.php file directly and redirect to friendly URI
RewriteCond %{THE_REQUEST} [A-Z]{3,9}\ /default\.php\?value=([^&\ ]+)
RewriteRule ^ /%1? [R=301,L]
#redirect non existent (404) folder to get variable
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /default.php?value=$1 [L]

【讨论】:

  • 我觉得令人沮丧的是,经过深思熟虑的问题被忽略了,但对代码的请求却在这个网站上得到满足。它应该被标记为重复并继续前进,但是您的答案的质量仍然值得一票。我只是想澄清一下最近出现的回答模式的挫败感。
  • @Tarquin 谢谢,你说得有道理,这就是为什么我至少尝试提供一些关于他需要什么而不是仅仅提供代码的见解。应该表现出一些努力。我去过那里一次,所以只是想帮助别人。 :)
  • 我完全理解。我也想回馈 SO,因为它多年来对我也很好。
  • @PanamaJack 谢谢你的解决方案,确实很有帮助。
  • @Tarquin 如果我的提问方式打扰了您,我很抱歉。我在这个网站上提出问题是相当新的,但有一件事可以肯定的是,这个网站过去对我有很大帮助,我向您保证,在不久的将来发布问题时,我会考虑您的建议。
最近更新 更多