从 URL 中删除目录

Posted

技术标签:

【中文标题】从 URL 中删除目录【英文标题】:Remove directory from URL with 【发布时间】:2013-09-11 04:38:49 【问题描述】:

我正在将 Magento 站点从 example.com/shopping 移动到 example.com,并且我必须 301 将所有 URL 重定向到新位置 (example.com)。我假设我可以在 .htaccess 文件中使用 mod_rewrite 来创建重写规则来执行此操作?我尝试学习如何使用 mod_rewrite,但语法对我来说太复杂了。

有数百个页面需要重定向。示例:

http://www.example.com/shopping/product-category-1/product-sub-category.html

http://www.example.com/product-category-1/product-sub-category.html

这是为了让人们在通过旧网址进入网站时不会遇到 404 错误。

【问题讨论】:

我实际上将不得不在几个小时内做同样的事情,我的谷歌查询将类似于.htaccess redirect single page。它出现了很好的例子,比如.htaccess 301 redirect of single page 【参考方案1】:

尝试将其添加到文档根目录中的 htaccess 文件中,最好高于您可能已经拥有的任何规则:

RewriteEngine On
RewriteRule ^shopping/(.*)$ /$1 [L]

如果您想重定向浏览器以使新 URL 出现在地址栏中,请在方括号中添加 R 标志:

RewriteEngine On
RewriteRule ^shopping/(.*)$ /$1 [L,R=301]

【讨论】:

好的,这是很好的建议,谢谢。我的下一个问题是:这会干扰默认 Magento .htaccess 文件的任何其他方面吗? @pbujok 如果 magento 期望 URL 中有一个 /shopping/ 路径,它会,但这真的取决于你如何设置它 [L] 部分是否会阻止运行 Magento 功能所需的其他重写?只包含 R=301 并让其余的重写运行会更好吗? @pbujok 重写引擎循环,因此在应用该规则后,新的 URI(将是一个没有 /shopping/ 的)将再次通过所有规则。 L 只是在当前迭代中停止重写。 但是要访问管理员,我不能像之前那样使用 mysite.com/admin。现在我需要输入 mysite.com/index.php/admin

以上是关于从 URL 中删除目录的主要内容,如果未能解决你的问题,请参考以下文章

从 url Wordpress 中删除目录名称

如何使用本地主机的 .htaccess 从 URL 中删除目录名称

使用 .htaccess 从 URL 中删除“/php/”子目录

如何使用 htaccess 重写从 url 中删除此目录/文件夹?

有没有办法使用 Vue-Router 从动态 URL 中删除目录?

htaccess:在提供原始内容时从 URL 中删除子目录