所以我有一个与生产环境相同的开发环境,我需要创建一个类似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
页面显示为纯HTML,没有CSS,只有文本…
有人有什么想法吗?我的COVID隔离大脑不能正常工作。
仅供参考,我真的不明白重写,所以如果你能解释什么是错的,那将是惊人的!
看起来您可能使用了CSS(可能还有其他静态资源)的相对url路径。你的第一条规则看起来像是试图解决这个*1。
如果您正在重写形式/foo/bar
(双路径深度)的URL请求,如您的规则所示,并且您的资源相对于根中的/index.php
链接,那么资源将不会被发现,因为它们是相对于客户端URL (/foo/bar
)解决的(由浏览器),所以您最终会得到/foo/css/mystyles.css
,而不是/css/mystyles.css
,因为您可能期望。如果您查看浏览器开发工具中的网络流量,您应该可以看到发生了什么。
您需要使用绝对url或根相对url(以斜杠开始),或者,作为的解决方案,设置base
元素来告诉浏览器应该如何解析相对url。但是,请注意,使用base
元素还有一些额外的注意事项,特别是关于页面内锚。
请参阅我在Webmasters Stack上对以下问题的回答,该问题更详细地介绍了这一点:
- Webmasters: .htaccess重写URL导致丢失CSS
RewriteRule ^.+?/((img|css|js)/.+)$ /$1 [L,R=301,NC]
*1
你的第一条规则是尝试删除(错误的)url路径,出现在/img
,/css
和/js
文件请求之前,这可能是由于使用相对url路径到你的静态资源。
如果您一开始就正确地链接到静态资源(使用根相对url),那么应该是不必要的。但是试图通过外部重定向来纠正这个问题对用户、服务器和潜在的SEO都是不利的。
除非这个指令有其他用途,否则这个指令应该被删除。
RewriteRule ^([^/]*)/([^/]*)$ ./index.php?varible=$1&ref_URI=$2 [L]
旁白:替换字符串上的./
前缀是多余的,应该删除。