【问题标题】:Vanity URLs with resources in other folders具有其他文件夹中资源的虚 URL
【发布时间】:2012-12-07 19:47:15
【问题描述】:

我想为我的网站创建较短的链接,例如

site.come/u/1

而不是

site.com/user.php?u=1

我玩过mod_rewrite,但老实说不知道我在用它做什么,我可以创建 url,但是当页面上加载资源时,它们是从 @987654324 加载的@而不是/css/core.css

我正在使用相对 URL 加载 css/images/js,有没有办法让重写规则排除某些文件夹,而无需将我的所有代码更改为绝对 URL?

谢谢

【问题讨论】:

  • 为什么不用绝对路径?如果 url 重写有效,则不是 mod_rewrite 问题。
  • 我们有几百行代码,我们可以替换路径,但它位于优先级列表的底部。我询问 mod_rewrite 的原因是我想知道是否有办法将目录排除在重写之外,例如 css 目录

标签: php apache mod-rewrite


【解决方案1】:

你可以试试:

RewriteCond %{REQUEST_URI} ^(css|js|images)/.*$ [NC]
RewriteRule ^(.*)$ $1 [L]

并将其放在任何其他规则之前。

我已经测试过 here 并且它有效!

【讨论】:

  • 谢谢,我会尽快试试的
【解决方案2】:

嗯,你几乎是在回答你自己的问题——你需要为你的 css 使用绝对路径,而不是使用相对路径。

您的浏览器现在将页面视为 www.site/u/user.php,即您需要使用 ../css/core.css。如果您的站点位于根目录中,/css/core.css 可能就足够了,但使用完整路径更安全(即 echo $webpath."css/core.css" 其中 $wehpath 很可能类似于 $webpath="http://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];

【讨论】:

  • 这是我试图避免的,但如果这是唯一的解决方案,那就必须这样做!谢谢:)
【解决方案3】:

你应该使用绝对路径,一切都会好起来的。

例如,您可以这样做:

<?php 
$baseURL = basename($_SERVER['SCRIPT_FILENAME']); 
?>
<link href="<?php echo $baseURL; ?>/css/core.css" rel="stylesheet" type="text/css" />

【讨论】:

    猜你喜欢
    • 2017-05-31
    • 2020-11-25
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2016-02-11
    • 1970-01-01
    相关资源
    最近更新 更多