温馨提示:本文翻译自stackoverflow.com,查看原文请点击:php - URL rewrite in htaccess results is missing CSS and images
.htaccess php mod-rewrite

php - htaccess结果中的URL重写缺少CSS和图像

发布于 2020-04-09 23:08:30

我需要从网址中删除特定内容。在这里,我给出一个页面名称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

为什么我的所有样式表和其他目录无法正常运行?

查看更多

提问者
Md. Tahazzot
被浏览
102
MrWhite 2020-02-02 02:43
RewriteRule index.php?url=$1 [QSA, L]

我认为您的问题中有两个明显的错别字(?),使该指令完全无效...您缺少RewriteRule 模式,因此它实际上不匹配任何内容,并且flags参数中的错误空格在语法上是无效的,导致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 /user/anonymous,则浏览器将解决任何相对URL 相对于/user/anonymous(不是文档根目录-这可能是你期待什么)。如果您有一个相对的URL,css/styles.css那么浏览器自然会将其解析为/user/css/styles.css-可能不存在(并且可能会被重写为index.php-但这不是问题,但实际上不存在)是问题)。

如果您在浏览器中查看网络流量(HTTP请求),它应该为您提供提示。

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

在网站管理员堆栈上查看对以下问题的回答,以进一步解释这一问题: