【问题标题】:Remove /Index from url via htaccess通过 htaccess 从 url 中删除 /Index
【发布时间】:2020-07-07 15:11:14
【问题描述】:

我目前已将我的 htaccess 设置为通过以下代码去除我的页面扩展。

RewriteRule ^(.+).php$ /$1 [L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)/?$ /$1.php [END]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index($|\ |\?)
RewriteRule ^ /%1 [R=301,L]

但是,如果用户现在点击指向索引页面的链接(即:example.com/index),它会在我想强制删除的 url 中显示 /index。我已经看到了一百万个关于如何使用 htaccess 删除 index.php 或 index.html 的示例,但似乎无法找到将它们合并到我的文件中的方法,因为我的 url 没有文件扩展名。

附:我在这方面的经验非常缺乏,感谢详尽评论的示例。

【问题讨论】:

  • “跟随指向索引页面的链接” - 大概是您自己的内部链接不包含 index,这是为了修复第 3 方入站链接?
  • 不,我使用生成器,不想浏览和更新所有内部链接。
  • 在这种情况下,您不应该在.htaccess 中实施重定向来删除index,因为它可能会减慢您的用户速度,使您的服务器的请求加倍并且不利于您的搜索引擎优化。 唯一的“实用”解决方案是更新您的内部链接。
  • 我的网站托管在全球 165 台不同的服务器上,速度和负载并不是真正的问题。更不用说每次我推送更新时我都不想为 100 多个网站这样做,而 htaccess 是一次性解决方案。但我感谢您的反馈,并同意在大多数情况下这是低效的。

标签: .htaccess


【解决方案1】:

我认为这就是您要寻找的:

RewriteEngine on

# handle "file name extensions"
RewriteRule ^/?(.+)\.php$ /$1 [R=301,END]
# internally add file name extension
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^/?(.*)/?$ /$1.php [END]

# handle "index" keyword
RewriteRule /?index/?$ /%1 [R=301,END]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^/?(.*)/?$ /$1/index [END]

它匹配%{REQUEST_URI}而不是%{THE_REQUEST}中的“index”关键字,并添加所需的内部重写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多