.htaccess 文件 URL 重写规则后的 JS 和 CSS 呈现问题

JS and CSS Rendering Issues After .htaccess File URL Rewrite Rule

我在我的电脑上使用 WAMP 服务器作为本地主机。我想在没有 PHP 扩展名的情况下重写我的 URL 并删除从 http://myproject/post.php?page=page_slughttp://myproject/post/page_slug 的查询字符串(但可读),我应该能够阅读“page_slug”通过“post.php”页面上的 echo $_GET['page'];。为此,我在下面分享了一个具有简单层次结构的项目。

Project_Folder:

现在我想从我的 URL 中删除所有 .PHP 扩展名,所以我使用了下面的 .htaccess 代码并且它工作正常。

# Options is required by Many Hosting
Options +MultiViews

#Remove .PHP Extension And Force Redirect To Without .PHP File Name In URL
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ .php [NC,L]
#RewriteCond %{THE_REQUEST} \s([^?]*)\?p=(\S+)\s [NC]
#RewriteRule ^ %1/%2? [R=301,L]

在上面的代码之后,我可以将我的 URLs 从 http://myproject/post.php?page=page_slug 重写为 http://myproject/post?page=page_slug 意味着。PHP 扩展现在已成功删除。

现在为了使我的 URL 摆脱查询字符串模式,我在 .htaccess 文件中的上述代码之后使用了以下代码。

RewriteCond %{THE_REQUEST} \s([^?]*)\?p=(\S+)\s [NC]
RewriteRule ^ %1/%2? [R=301,L]

在上面的代码之后,我可以将我的 URLs 从 http://myproject/post?page=page_slug 重写为 http://myproject/post/page_slug 意味着查询字符串现在已成功删除,但我的 JS 和 CSS 现在坏了,如下所示。

但是我的每个文件都是完美的,因为当我删除上面的第二个代码集时,它就可以正常工作了。此外,它们加载正常,如下所示。

我注意到一件事,我的 CSS 和 JS 文件数据现在随着我的 PHP 文件数据而改变,如下所示。为什么会这样……???

那么这个问题的解决方法是什么...???另外,请记住我还需要在我的文件中读取 QUERY STRING 参数。

“问题”是您似乎在使用静态资源(CSS、JS 和图像)的相对 URL-paths。所以这是一个 client-side URL 分辨率问题。您应该对您的资产使用 root-relative(以斜杠开头)或绝对(使用方案 + 主机名)URLs,以便无论 URL-path 深度如何都可以定位它们。 (请注意,您的 JS 发出的任何请求,例如 AJAX,也应该是 root-relative 或绝对值。)

问题不在于 .htaccess,而是当您将 URL 从 /post.php?page=page_slug 更改为 /post/page_slug 时,任何 client-side 相对 URL 将相对于 /post/ 进行解析,而不是像以前那样 /(文档根目录)。

对 JS(和 CSS)文件的请求导致 404,因此 404 HTML 错误文档很可能被解析为 JS 并失败(即。“未捕获的语法错误:意外标记:'<'" - 由于 <!DOCTYPE html> 或打开 <html> 标签)。

一种可能的 解决方法(避免更改您的 URLs)是在 [=18] 中使用 base HTML 元素=] 部分指示任何相对 URL 应该相对于什么来解析,覆盖当前文档的 URL。但是,如果您使用 href="#element" 形式的 in-page 锚点,这会有一些额外的警告 - 因为它们现在将相对于 base 元素中声明的文档而不是当前文档进行解析.

另请参阅 my answer 网站管理员堆栈中的以下问题,该问题对此有更详细的介绍: