重写规则以将两个友好的 url 重定向到同一个文件
Posted
技术标签:
【中文标题】重写规则以将两个友好的 url 重定向到同一个文件【英文标题】:Rewrite rule to redirect two friendly urls to same file 【发布时间】:2021-09-12 16:28:55 【问题描述】:我正在尝试将两个不同的 url 重定向到同一个文件。
网址是:http://localhost/CLIENTI/HOTEL/cp/amministratori
和http://localhost/CLIENTI/HOTEL/cp/amministratori/test
实际上我目前看到的是第一个 url,但是当我打开第二个时,我看到客户端包含很多文件错误(页眉/页脚上的 es js 和 css 文件)。
这是我的 .htaccess 文件:
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^dashboard$ dashboard.php [NC,QSA,L]
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^amministratori$ dashboard.php [NC,QSA,L]
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^amministratori/test$ dashboard.php [NC,QSA,L]
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
这就是我所有的 htaccess 代码。错误是 bootstrap.js 和 main.js 的 404,其中包含前端的自定义代码。我已经理解了这个问题,但是如果有替代前导斜杠的解决方案,我还没有理解,因为我的页眉和页脚包含在 php 中,所以在/cp/amministratori
中它们现在可以工作,但显然如果我改变带有前导斜线,它们将不再起作用
【问题讨论】:
“我看到很多文件包含错误” - 正确解释这实际上意味着什么。 (我怀疑您在这里谈论的不是 PHP 端的实际包含,而是客户端的嵌入式资源......?) 是的,我的意思是那种错误 那是因为你在客户端改变路径的文件夹深度。amministratori/test
是一个级别的文件夹,而不仅仅是 amministratori
(根据您的代码,这是您在第一种情况下实际重定向的内容,而不是您所说的 amministratori/
) - 所以相对 URL 将不起作用,您需要使用以斜杠开头的 URL,指的是 Web 根目录。
@johnnydeppa,如果您的 htaccess 文件中还有其他 htaccess 规则,请告诉我们?除了显示的?另外请提及您在访问这些链接时遇到了什么样的错误?谢谢。
这就是我说的原因,请改用/js/main.js
。 (Ravinder 的回答中提到的 base
元素以稍微不同的方式实现了相同的目标。)
【参考方案1】:
根据您显示的尝试,请尝试遵循 htaccess 规则。确保将您的 htaccess 文件与 CLIENTI 文件夹(不在其中)一起放置。
请确保在测试您的 URL 之前清除您的浏览器缓存。
RewriteEngine On
RewriteBase /CLIENTI/HOTEL/cp/amministratori/
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^dashboard/?$ dashboard.php [NC,QSA,L]
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^/?$ dashboard.php [NC,QSA,L]
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^test/?$ dashboard.php [NC,QSA,L]
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^([^\.]+)$ $1.php [QSA,L]
JS/CS 重写/重定向:
您可能需要使用 base 标签来修复您的 js 和其他相关资源。如果您使用相对路径链接 js 文件,那么该文件显然会得到 404,因为它正在寻找 URL 路径。例如,如果 URL 路径是 /file/ 而不是 file.html,那么您的相关资源将从 /file/ 加载,这不是目录而是重写的 html 文件。要解决此问题,请使您的链接成为绝对链接或使用基本标签。在您的网页标题中添加此<base href="/">
,以便您的相关链接可以从正确的位置加载。
【讨论】:
以上是关于重写规则以将两个友好的 url 重定向到同一个文件的主要内容,如果未能解决你的问题,请参考以下文章
在htaccess中进行URL重写和重定向的确切过程是什么?