【问题标题】:rewrite a folder name using .htaccess使用 .htaccess 重写文件夹名称
【发布时间】:2010-11-18 21:12:30
【问题描述】:

我想知道是否可以使用.htaccess 来重写文件夹名称。 我的意思是这个。

假设我有一个类似的网址:

www.site.com/folder1/page.php

现在我想将 url 重写为(例如)

www.site.com/apple/page.php

folder1 是我网站空间上的现有文件夹。

重要提示:“apple”不是文件夹,而只是一个名称!

好的,这是一步一步的计划:

  1. 用户类型www.site.com/folder1/login.php
  2. url 应该重写而不是重定向到www.site.com/apple/login.php

这意味着apple 只是一个名称而不是一个目录。所有代码都应该来自folder1。实际上,苹果应该只是folder1 的别名。我不能只将folder1 重命名为Apple。因此,我只需将folder1 重写为apple

【问题讨论】:

  • 您的网站空间中是否也存在苹果文件夹?
  • 对不起,你需要更清楚你想要发生的事情。您能否逐步告诉我们您希望发生的事情,例如用户输入的网址以及实际文件在您的网络空间中的位置。
  • 我更新了,希望更清楚。
  • 在第一部分中,“folder1”对应该看到“apple”的用户隐藏起来。但是你通过添加“用户类型 www.site.com/folder1/login.php”来“澄清”......你能澄清......再次......?
  • 当用户键入 www.site.com/folder1/login.php 时,它应该将 url 更改为 www.site.com/apple/login.php,其中 apple 只是 folder1 的别名。

标签: .htaccess rewrite


【解决方案1】:

mod_rewrite 只能重写/重定向请求的 URI。因此,您需要请求 /apple/… 将其重写为相应的 /folder1/…

试试这个:

RewriteEngine on
RewriteRule ^apple/(.*) folder1/$1

此规则将内部以 URI 路径 /apple/… 开头的每个请求重写为 /folder1/…


编辑    因为您实际上正在寻找相反的方式:

RewriteCond %{THE_REQUEST} ^GET\ /folder1/
RewriteRule ^folder1/(.*) /apple/$1 [L,R=301]

此规则旨在与上述其他规则一起使用。 /folder1/… 的请求将在外部重定向到/apple/…,然后/apple/… 的请求将在内部重写回/folder1/…

【讨论】:

  • 啊,秋葵我觉得你是对的。我误解了原始海报的意思,它是倒着描述的。 +1
  • 我用site.com/folder1/login.php尝试过这个,但它没有重写为site.com/apple/login.php
  • @sanders:正如我已经说过的,您必须请求/apple/login.php 将其重写为/folder1/login.php
  • @Gumbo:我想将 folder1/login.php 重写为 apple/login.php 并因此尝试了 RewriteRule ^folder1/(.*) apple/$1 但不起作用。我什至用 indows 正则表达式测试器尝试过,但模式不匹配
  • 通过您的编辑,它现在显示 www.site.com/apple/login.php 但在屏幕上我看到一个错误,因为它说它找不到请求的页面。
【解决方案2】:

尝试:

RewriteRule ^/apple(.*)?$ /folder1$1 [NC]

您希望出现在 url 中的文件夹位于语句的第一部分 - 这是它将匹配的内容,第二部分将其“重写”到您现有的文件夹中。 [NC] 标志意味着它将忽略大小写差异,例如 Apple/ 仍将转发。

教程请看这里:http://www.sitepoint.com/article/guide-url-rewriting/

还有一个不错的 Windows 测试实用程序,您可以从这里下载: http://www.helicontech.com/download/rxtest.zip 请注意,您需要省略域名 - 因此测试将针对 /folder1/login.php

要从 /folder1 重定向到 /apple 试试这个:

RewriteRule ^/folder1(.*)?$ /apple$1 [R]

重定向然后重写只需在 htaccess 文件中结合以上内容:

RewriteRule ^/folder1(.*)?$ /apple$1 [R]
RewriteRule ^/apple(.*)?$ /folder1$1 [NC]

【讨论】:

  • 感谢您的帮助,但是当我对此进行测试时:我用 site.com/folder1/login.php 尝试了这个,但它没有重写到 site.com/apple/login.php 我得到了模式不马赫
  • @Josh:您的编辑 RewriteRule ^/folder1(.*)?$ /apple1$1 [R] 也不起作用。
  • 这个重定向慢吗?当重定向发生时,与非重定向版本相比?
  • 很遗憾,上面的测试实用程序下载链接不再有效
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 2017-02-17
  • 2021-11-02
相关资源
最近更新 更多