更改 Web 根目录 - 锚链接问题



我尝试通过.htaccess文件编辑Web根目录:

RewriteCond %{REQUEST_URI} !newweb/
RewriteRule (.*) /newweb/ [L]
RewriteCond %{REQUEST_FILENAME} !-f

index.html代码更改CSS中,通过基本标记JS链接

<base href="http://example.com/newweb/">

但Anchror链接不会重定向到example.com/#tag而是重定向到example.com/newweb#tag

我需要第一个选项才能工作。

...但Anchror链接不会重定向到example.com/#tag而是重定向到example.com/newweb#tag

是的,使用base元素(更正相对 URL(并非没有警告。页面内锚点(如#tag(是"相对 URL",因此现在它是相对于baseURL 的。

解决此问题的唯一方法是使用指向当前页面/URL 的根相对(或绝对(URL 完全限定您的页面内链接。(这可能会破坏首先使用base标记作为其他相关 URL 的解决方法的意义。或者首先不要使用指向您的资源/其他页面的相对 URL。

有关更多详细信息,请参阅我对专业网站管理员堆栈上类似问题的回答:

  • https://webmasters.stackexchange.com/a/86458/1243

更新:看过你的网站,它本质上是一个依赖片段标识符的单页网站(即。#tag(,然后您应该将资源(CSS,JS和图像(的所有相对URL更改为根相对(以斜杠开头(并删除base元素。

通过"根相对",它应该是相对于预期的客户端根目录的根目录,而不是实际的文件系统根目录。

例如,HTML 源中的以下相对 URL:

vendor/bootstrap/css/bootstrap.min.css

应更改为根相对 URL(而不是文件系统路径(:

/vendor/bootstrap/css/bootstrap.min.css

请注意,这不包括/newweb文件系统子目录。

然后,.htaccess中的指令在内部重写/newweb/vendor/bootstrap/css/bootstrap.min.css的 URL(底层文件系统路径(。然后,/newweb子目录对客户端完全隐藏。

通过在 HTML 中使用base标记,您还将/newweb子目录暴露给客户端(和搜索引擎(,并可能创建重复的内容,因为您的网站在example.com/example.com/newweb/都可用。

RewriteCond %{REQUEST_URI} !newweb/
RewriteRule (.*) /newweb/ [L]
RewriteCond %{REQUEST_FILENAME} !-f

但是,这些指令是不正确的。您的.htaccess文件中还有其他指令吗?最后一个RewriteCond指令在最后本身无效。前面的RewriteRule重写了目录根目录的所有内容(这可以解释为什么您在 HTML 源代码中使用相对 URL?

要将所有内容重写为/newweb子目录中的相应 URL,则需要如下内容:

RewriteEngine On
# Rewrite enverything to the /newweb subdirectory
RewriteRule !^newweb/ /newweb%{REQUEST_URI} [L]

这假定您的页面仅引用包含在/newweb子目录中的资源,而不引用文件系统上其他位置的资源。如果是,那么您还需要文件系统检查。

但是,就其本身而言,这并不能解决example.com/newweb/仍然可以访问的问题(尽管现在 URL 路径未公开,这不太重要(。这可以通过从/newweb外部重定向回文档根来解决(但我们需要小心重定向循环,因为重写方向相反(。

因此,请尝试以下操作:

RewriteEngine On
# If /newweb is requested directly then redirect to remove it
RewriteCond %{REDIRECT_STATUS} ^$
RewriteRule ^newweb/?(.*) /$1 [R=302,L]
# Rewrite enverything to the /newweb subdirectory
RewriteRule !^newweb/ /newweb%{REQUEST_URI} [L]

仅当确认302(临时(恢复正常时,才将其更改为 301(永久(。

最新更新