【问题标题】:.htaccess FANCY URLS not working within folder.htaccess FANCY URLS 在文件夹中不起作用
【发布时间】:2021-10-23 19:35:08
【问题描述】:

所以我有一个与我的生产环境相同的开发环境,我需要创建一个看起来像 www.example.com/booking/{varible1}/{varible2} 的 FANCY URL。

但是我使用的代码不起作用...

RewriteEngine On
RewriteRule ^.+?/((img|css|js)/.+)$ /$1 [L,R=301,NC]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)$ ./index.php?varible=$1&ref_URI=$2 [L]

它只是将index.php 页面显示为没有 CSS 的纯 HTML,只是文本...

有人有什么想法吗?我的 COVID 隔离大脑无法正常工作。

仅供参考,我不太懂重写,所以如果你能解释什么是错的,那就太棒了!

【问题讨论】:

  • 那么,对那些样式表和脚本的引用的结构是什么?我们无法猜测 ...
  • 还要确保您已禁用 MultiViews 并注意可能添加到目录请求中的尾部斜杠。

标签: php .htaccess mod-rewrite url-rewriting


【解决方案1】:

看起来您可能正在使用 CSS 的相对 URL 路径(可能还有其他静态资源)。您的第一条规则似乎是在尝试解决此问题*1

如果您正在重写您的规则所指示的/foo/bar(双路径深度)形式的 URL 请求,并且您的资源相对于根中的/index.php 链接,则将找不到资源因为它们是相对于客户端 URL (/foo/bar) 解析的(由浏览器),所以你最终会得到/foo/css/mystyles.css,而不是你所期望的/css/mystyles.css。如果您查看浏览器开发工具中的网络流量,您应该会看到发生了什么。

您需要使用绝对或相对根 URL(以斜杠开头),或者作为一种解决方法,设置 base 元素来告诉 浏览器应该如何解析相对 URL。但是请注意,使用 base 元素还有其他注意事项,尤其是关于页内锚点。

请参阅my answer 网站管理员堆栈上的以下问题,该问题更详细地介绍了这一点:


RewriteRule ^.+?/((img|css|js)/.+)$ /$1 [L,R=301,NC]

*1 您的第一条规则是尝试删除出现在/img/css 之前的(错误的)URL 路径和 /js 文件请求,这可能是由于使用静态资源的相对 URL 路径而产生的。

如果您一开始就正确链接到静态资源(使用相对于根的 URL),则不需要这样做。但是尝试通过外部重定向来纠正这一点对用户、您的服务器和潜在的 SEO 都是不利的。

除非此指令用于此处未明确说明的其他目的,否则应删除此指令。


RewriteRule ^([^/]*)/([^/]*)$ ./index.php?varible=$1&ref_URI=$2 [L]

旁白:替换字符串上的./前缀是多余的,应该删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 2017-05-21
    • 2021-08-10
    • 2014-04-11
    • 1970-01-01
    • 2017-12-19
    • 2012-09-07
    相关资源
    最近更新 更多