【问题标题】:How to rewrite and redirect at the same time如何同时重写和重定向
【发布时间】:2013-04-27 17:02:51
【问题描述】:

假设有一个 example.com(在 apache 上工作)并且我们有一个名为“sub”的子目录(example.com/sub)。技术上是否可以配置.htacess 将http://example.com/sub/ 重写为http://example.com/home/ 并将所有流量重定向到它,以便/home 中的任何路径都应该重定向到/sub 中的相同路径,我已经尝试过这个

RewriteEngine On
Options +FollowSymlinks
RewriteRule ^sub/?$ /home/ [R,NC]
Redirect /index.html http://example.com/sub

但最终我得到 404 Not Found。有任何想法吗 ?

附:即使我收到 1 个答案,我之前的问题也已关闭:

RewriteRule /sub/$ /home/$1 [NC,L,R=301]
RewriteRule /index.html http://example.com/sub [R]

这对我不起作用(401 禁止)。

【问题讨论】:

  • 请澄清您的问题,以便您向我们举例说明用户将在浏览器地址栏中看到的内容,以及您是否希望他们重定向到不同的地址(这会改变他们在地址栏中看到的内容) ) 或者您想要静默重写(指向实际文件,但不会更改用户浏览器在地址栏中显示的内容)。目前尚不清楚您要达到的目标。
  • 好吧,我想澄清一下:我想让最终用户在浏览器中看到 example.com/home 而不是 example.com/sub 并且我想从 example.com 重定向到 example.com/home 。希望现在你能理解我。

标签: apache mod-rewrite redirect url-rewriting


【解决方案1】:

要将访问者对/home/anypath/anyfile 的请求静默重写为您服务器上/sub/anypath/anyfile 的底层路径,您可以使用以下命令:

RewriteRule ^home(?:/(.+))?$ /sub/$1

要将用户的浏览器从//index.html 重定向到干净的/home URL,您可以尝试以下操作:

RewriteRule ^(?:$|index.html$) /home [R=permanent]

(对于这两个规则,如果您使用的是 httpd.conf,则需要在 ^ 符号后添加一个正斜杠。如果您使用的是 .htaccess,那么您不需要在模式的开始。)

请注意,您不能(轻易地)从/sub 重定向到/home,因为这将创建一个无限循环的重定向和重写。但是不要担心从/sub 重定向到/home,因为干净的 URL 是为了让 URL 在广告文献和重新启动的网页上看起来不错。如果访问者碰巧访问了旧的“丑陋”网址,也不会受到伤害,他们会在点击任何新链接后立即转到新的干净网址。

【讨论】:

  • 嗯,这部分对我有用。当访问者输入 example.com 时,他会自动重定向到 example.com/home,就像我想要的那样,但是每当他点击 URL 时,他就会被重定向到 example.com/sub(而不是 home)。好吧,无论如何,非常感谢。
  • 您的意思是您希望 /home/anypath/anyfile 的请求被静默地重写为 /sub/anypath/anyfile 吗?如果是这样,那将需要更改 RewriteRule。
  • 我觉得我完全把你弄糊涂了,虽然很抱歉。我希望将 /sub/anypath/anyfile 的请求重写为 /home/anypath/anyfile
  • 我已修改此答案,以便 /home 中的任何路径都应重定向到 /sub 中的同一路径,但您需要编辑自己的问题以更清楚地说明您需要什么,所以该页面的访问者可以从您的问题和问题得到的任何答案中学习。
猜你喜欢
  • 2017-07-26
  • 1970-01-01
  • 2016-06-18
  • 2014-11-27
  • 2019-07-03
  • 2016-06-02
  • 2017-11-21
  • 2015-04-19
  • 1970-01-01
相关资源
最近更新 更多