【问题标题】:Rewriting URLs to Be Routed through index.php通过 index.php 重写要路由的 URL
【发布时间】:2026-01-07 02:55:02
【问题描述】:

http://www.example.com/page 等 URL 重写为 http://www.example.com/?pg=page?当我这样做时,它可以工作,但是页面中的所有引用(如 JavaScript 和 CSS)都会被篡改。请帮忙。

【问题讨论】:

  • 你想将第一个重定向到第二个,还是仅仅让第一个显示内容为第二个(隐藏丑陋的 url)?
  • Gabriel,我刚刚重新添加了 mod_rewrite 和 .htaccess,因为这些是您可能使用的解决方案集。在过去一周左右的时间里,我在你的 Q 上看到了几十个变体。为什么不浏览最近的.htaccess Qs 并采用其中之一呢?查看Apache rewrite documentation,尤其是!-f!-d 标志的使用
  • Fudged = 他们没有被包括在内。我认为下面提到的基本 href 是一个可靠的备份解决方案,而我改进了重写代码。我希望这样,如果一个人访问 example.com/page,他们实际上是在访问 example.com/?pg=page
  • 你应该看看 CodeIgniter,它会帮助你进行 URL 路由,并且是一个很棒的轻量级 PHP 框架。
  • 如果您的.htaccess 有具体问题,我们需要查看文件的内容。

标签: php regex .htaccess mod-rewrite


【解决方案1】:

当使用 mod 重写 URL 时,<base> href 变得非常有用!例如

<html>
 <head>
  <base href="//www.example.com/" />
  <script type="text/javascript" src="js/script.js"></script>
  ...

无论 URL 是什么,该来源都会正确地为来自 www.example.com/js/script.js 的 js 提供服务。

【讨论】:

    【解决方案2】:

    你可以试试这个:

    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/.]+)$ ?pg=$1 [L,QSA]
    

    【讨论】:

    • 这就是我最终要做的事情。谢谢。