【问题标题】:URL rewrite in htaccess results is missing CSS and imageshtaccess 结果中的 URL 重写缺少 CSS 和图像
【发布时间】:2020-05-17 18:34:34
【问题描述】:

我需要从我的网址中删除特定内容。这里我给一个页面名称user.php 并使用$_GET['url'] 获取它,然后使用PHP explode() 方法使其成为数组。

https://www.example.com/index.php?url=user

我需要像这样删除index.php?url=

https://www.example.com/user

现在我已经在.htaccess 中使用了这段代码:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule index.php?url=$1 [QSA, L]

几乎一切都很好,user.php 页面加载完美。但是当我的 URL 出现斜线时,它会停止显示 CSS 或其他 IMG 目录。但是当我删除 .htaccess 文件时,它在这个 URL 中工作正常:

https://www.example.com/index.php?url=user/anonymous

但当我分配 .htaccess 规则时,此 URL 中不起作用。

https://www.example.com/user/anonymous

为什么我的所有样式表和其他目录都不能正常工作?

【问题讨论】:

标签: php .htaccess mod-rewrite


【解决方案1】:
RewriteRule index.php?url=$1 [QSA, L]

我认为您的问题中有几个明显的拼写错误(?),这使该指令完全无效...您缺少 RewriteRule pattern,因此这实际上不匹配任何东西,并且 flags 参数中的错误 space 在语法上无效,导致 500 Internal Server Error 响应?!

RewriteRule 指令应该写成:

RewriteRule ^([\w/-]+)$ index.php?url=$1 [QSA,L]

^([\w/-]+)$ 匹配包含以下任何字符的 URL 路径:a-zA-Z0-9_(下划线)、/(斜杠)和 -(连字符)。我已经排除了点,它自然是真实文件名的一部分。

您还应该确保禁用 MultiViews,以便 mod_negotiation 不会在 mod_rwrite 之前重写请求 - 因为您的“无扩展”请求似乎直接映射到文件名。例如。 /user 映射到 /user.php。将以下内容放在 .htaccess 文件的顶部:

Options -MultiViews

但是当我的 URL 出现斜线时,它会停止显示 CSS 或其他 IMG 目录。

这不是.htaccess 的问题,而是由使用相对 客户端URL 到您的静态资源引起的。当您请求 URL /user/anonymous 时,浏览器 会将任何相对 URL relative 解析为 /user/anonymous(不是文档根目录 - 这可能是您所期望的)。如果您有 css/styles.css 的相对 URL,那么 浏览器 自然会将其解析为 /user/css/styles.css - 这可能不存在(并且可能会被重写为 index.php - 但那不是问题 - 它不存在的事实是问题)。

如果您查看浏览器中的网络流量(HTTP 请求),它应该可以为您提供关于发生了什么的线索。

您需要将客户端 URL 更改为使用根相对(以斜杠开头)或绝对(方案 + 主机名)URL 来解决此问题。

请参阅my answer 网站管理员堆栈上的以下问题,进一步解释这一点:

【讨论】:

    【解决方案2】:

    在您的 .htaccess 文件中使用以下代码

    RewriteEngine On
    #main user page
    RewriteRule ^user$ index.php?url=user [L]
    #user detail page
    RewriteRule ^user/([^/]*)$ index.php?url=$1 [L]
    

    【讨论】:

    • 您是否从旧的 htaccess 文件中删除了所有 3 个 RewriteCond 条件?
    • 只需替换上面的 htaccess 代码并确保您已启用 mod_rewrite 模块。
    猜你喜欢
    • 2014-06-20
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多