【问题标题】:htaccess rewriterule for directory is changing the url in a undesireable way目录的 htaccess rewriterule 正在以不受欢迎的方式更改 url
【发布时间】:2010-12-10 05:37:39
【问题描述】:

编辑
在下面的 Seth 发表评论并前往有用的 apache 页面 here 之后,我发现 VirtualHosts 是解决以下问题的方法。
/编辑

--原帖--
首先,关于文件设置的一些背景知识。我正在运行一个托管多个域的 LAMP 服务器。我在这台服务器上有暂存站点和实时站点,位于 Web 根目录下的不同目录下。

示例 /webroot/live/site1/[公共文件] /webroot/live/site2/[公共文件]

/webroot/stage/site1/[公共文件] /webroot/stage/site2/[公共文件]

每个域的域都指向服务器的 IP,该 IP 指向 webroot 目录。我有一个 .htaccess 文件,可以根据 http_host 加载相应的内容。

例子

RewriteCond %{HTTP_HOST} ^www.site1-live.com [NC]
RewriteRule ^(.*)$ /live/site1/$1 [PT,L,QSA]

RewriteCond %{HTTP_HOST} ^www.site1-stage.com [NC]
RewriteRule ^(.*)$ /stage/site1/$1 [PT,L,QSA]

这些非常适合访问主页和任何内部页面,即使特定页面如 site1-live.com/view/123。每个站点的 htaccess 都会处理这些。

我的问题(抱歉花了这么长时间才到这里):

当我前往网站中的任何子目录时,例如 www.site1-live.com/rss,内容加载正常,但 URL 更改为类似以下内容

http://www.site1-live.com/live/site1/rss/

基本上显示了从 webroot 到文件的路径。

我怎样才能避免这种情况?我显然希望网址保持 www.site1-live.com/rss。我是否需要 rss 目录中的 htaccess 文件以某种方式阻止它?

提前致谢!

【问题讨论】:

  • 所以当你访问一个文件夹时它只显示根 url,而不是文件或页面?
  • 对,如果我去 www.site1-live.com/somepage.php 它保持原样。不过,我认为 Seth 对虚拟主机的推荐可能是正确的路线。我会调查这些。

标签: .htaccess mod-rewrite redirect


【解决方案1】:

将 ^www 替换为 ^(.*)

然后将整个网址放在第二行 www.yourdomain.com/live/...

【讨论】:

  • 那究竟是如何解决他的问题的?
  • 误读了您的帖子。您根本不应该为此使用 htaccess。您应该配置虚拟主机。您需要有关如何执行此操作的说明吗?
  • 我听说过那些……打算调查他们……是的,赛斯,那会很有帮助
  • 实际上是的,完美。在httpd.apache.org/docs/2.2/vhosts/examples.html 的指导下,一切正常。谢谢赛斯!
【解决方案2】:

道格,

为什么需要 QSA 标志?

无论如何,发生在您身上的是 mod_index(或任何为您服务的目录)正在将您的 www.site1-live.com/rss(不带结尾 /)重定向到带有结尾 / 的等效 URL。

如果您不使用 mod_alias 或在重写的 URL 上列出的其他内容,则删除 PT 应该可以正常工作。

【讨论】:

  • QSA 保留附加到 uri 的查询字符串,据我所知,它与此没有任何关系。我希望他在使用 [R] 标签时描述的行为......
  • 是的,我希望 [R] 也是如此,但他特别声明他正在使用 [PT]
  • 另一方面,如果他没有使用 Mod_Alias 或类似的东西,他应该不需要 PT。
  • 你可能是对的。不确定这是否能解决问题,但值得一试。
猜你喜欢
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 2016-06-22
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多