我尝试通过.htaccess
文件编辑Web根目录:
RewriteCond %{REQUEST_URI} !newweb/
RewriteRule (.*) /newweb/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
,并在index.html
代码中更改CSS
,JS
通过基本标记的链接
<base href="http://example.com/newweb/">
但是锚链接不会重定向到example.com/#tag
,而是重定向到example.com/newweb#tag
我需要第一种选择。
答案 0 :(得分:0)
...但是锚链接不会重定向到
example.com/#tag
,而是重定向到example.com/newweb#tag
是的,使用base
元素(更正相对URL)并非没有警告。页内锚点(例如#tag
)是“相对URL”,因此现在相对于base
URL。
解决此问题的唯一方法是完全限定您的页内链接,并使用指向当前页面/ URL的相对根(或绝对)URL。 (这可能会打败首先使用base
标签作为您 other 相对URL的解决方法的观点。)或者不要在您的资源/其他页面中使用相对URL第一名。
有关更多详细信息,请参见我对a similar question on the Pro Webmasters stack的回答:
更新:浏览了您的网站,该网站本质上是一页纸的网站,它依赖于所有页内链接的片段标识符(即#tag
),然后您应该将资源的所有 relative URL(CSS,JS和图像)更改为根目录(以斜杠开头),并删除base
元素。
通过“相对于根”,它应相对于您的预期客户端根,而不是实际文件系统根。
例如,HTML源中的以下相对URL:
vendor/bootstrap/css/bootstrap.min.css
应更改为相对于根的URL(而不是文件系统路径):
/vendor/bootstrap/css/bootstrap.min.css
请注意,这不包括/newweb
文件系统子目录。
.htaccess
中的指令然后内部重写 URL到/newweb/vendor/bootstrap/css/bootstrap.min.css
(基础文件系统路径)。然后,/newweb
子目录对客户端完全隐藏。
通过在HTML中使用base
标签,您还将/newweb
子目录暴露给客户端(和搜索引擎),并可能创建重复的内容,因为您的网站在{{1 }}和example.com/
。
example.com/newweb/
但是,这些指令不正确。您的RewriteCond %{REQUEST_URI} !newweb/
RewriteRule (.*) /newweb/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
文件中是否还有其他指令?最后的.htaccess
指令最后本身是无效的。并且前面的RewriteCond
将所有内容重写到目录根目录(这可能解释了为什么您诉诸于在HTML源代码中使用相对URL的原因?)
要将所有内容重写为RewriteRule
子目录中的相应URL,那么您将需要以下内容:
/newweb
这假定您的页面仅引用RewriteEngine On
# Rewrite enverything to the /newweb subdirectory
RewriteRule !^newweb/ /newweb%{REQUEST_URI} [L]
子目录中包含的资源,而不引用文件系统上的其他资源。如果是,那么还需要检查文件系统。
但是,就其本身而言,这不能解决/newweb
仍可访问的问题(尽管由于URL路径不公开,所以此重要性不那么重要)。可以通过从example.com/newweb/
回到文档根目录的外部重定向来解决此问题(但考虑到相反的重写方向,我们需要注意重定向循环)。
因此,请尝试以下操作:
/newweb
仅在确认正常工作后,才将302(临时)目录更改为301(永久目录)。