如何在路径中不以 index.html 开头的情况下使导航工作?

how to make navigation work without starting with index.html in path?

提问人:user129393192 提问时间:8/1/2023 更新时间:8/2/2023 访问量:38

问:

我有一个 apache2 Web 服务器,位于 .端点是并且是大学附属和管理的。我的根应该是,它由主服务器代理。/var/www/htmlxyz.comxyz.com/name

当我有:

# index.html
link to href='other.html'
# other.html
link to href='./'

在 中,仅当用户从 (用户正确路由到 );否则,如果用户开始于 那么他们就会被路由到(不存在)。var/www/htmlxyz.com/name/index.htmlxyz.com/name/other.htmlxyz.com/namexyz.com/other.html

我该如何解决这个问题?(首选 HTML + 服务器配置)

HTML Apache Web DOM 服务器

评论

0赞 Tim R 8/1/2023
问题不在于索引 .html,问题在于 .正斜杠对于目录结构很重要。namename/
0赞 user129393192 8/1/2023
我不想给用户带来这种@TimR

答:

0赞 Tim R 8/2/2023 #1

当您没有尾部斜杠时,会出现此问题。

xyz.com/name/通常,带尾部斜杠的目录是没有尾部斜杠的目录
,通常是一个文件
xyz.com/name

相对链接来自将相对于根目录进行解析,因为假定是根目录中的文件。这不仅会破坏锚点,还会破坏图像和样式表链接。xyz.com/namexyz.com/name


如果是目录,则某些服务器会自动重定向到 。由于您的没有,您可以将其设置为这样做(通过根 Web 目录中的文件直接在服务器上或通过根 Web 目录中的文件)。这将防止上述链接问题,并防止来自两个 URL 的重复内容(SEO 问题)。namename/httpd.conf.htaccess

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

更多信息和解释可以在文章“你应该在 URL 的末尾有一个尾部斜杠吗?”中找到,也可以通过对 URL 中的尾部斜杠进行 Web 搜索来找到。



重定向的替代方法是使用 <base> HTML 元素,该元素指定要用于文档中所有相对 URL 的基 URL。<head>

注意:这可能会破坏页面内的锚点。使用 on 时,链接指向 。但是,没有必要在每个页面中使用它,只需在 .<base href="/name/">xyz.com/name/other.html<a href="#some-id">in-page anchor</a>xyz.com/name/#some-id<base>index.html

评论

0赞 user129393192 8/2/2023
我刚刚尝试了您在中指定的规则,但它不起作用。同样的问题。我应该补充一点,(没有尾部斜杠)最初导致的位置与 相同,即 。只有在尝试相对重定向(比如说)时,我们才会看到。.htaccess/var/www/htmlxyz.com/namexyz.com/name/xyz.com/name/index.htmlother.htmlxyz.com/other.html
0赞 user129393192 8/2/2023
另一方面,该方法在第二次重定向(返回和返回另一个页面)后会将您发送到 。baseindex.htmlxyz.com/name/name/other.html
0赞 Tim R 8/2/2023
更新 .htaccess 时,最好在关闭浏览器后测试更改,可能点击重新加载,或者在私人窗口中更好。您是否使用前导斜杠和尾部斜杠?<base href="/name/">/name/
0赞 user129393192 8/2/2023
在 Safari 和 Chrome 的隐身/无痕式窗口中进行了测试。我完全按照你说的指定。我想强调的是,只有在第二个重定向时才有问题。base
0赞 Tim R 8/3/2023
“第二次重定向”是什么意思?你是说当你打开并使用链接时,它正确地链接到,但随后链接链接到?xyz.com/name/other.htmlhref='./'xyz.com/name/href='other.html'xyz.com/name/name/other.html