【问题标题】:RewriteRule for a file in a parent directory父目录中文件的 RewriteRule
【发布时间】:2013-11-28 14:46:36
【问题描述】:

我在 apache 服务器上建立了一个站点,桌面站点位于 /public_html 中,移动站点位于 /public_html/mob 中

我正在尝试设置一个 .htaccess 重写器,以便在用户访问 /mob 文件夹时将其发送到 /public_html 中的 index.php 文件。我当前的重写规则,在 mob 子文件夹中是:

RewriteRule ^(/)?$ ../index.php

我可以在 mob 子目录中加载相同的文件:

RewriteRule ^(/)?$ index.php

但是,我似乎无法让网站从父目录 (public_html) 加载 index.php 文件。

当我尝试在浏览器中加载 http://www.domain.com/mob 时收到:

Bad Request

Your browser sent a request that this server could not understand.

同样的重写器在我们的开发服务器上运行良好,但在我们的实际环境中却无法运行。

/public_html/mob 文件夹中的 .htaccess 文件如下:

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^(/)?$ ../index.php [L,QSA]

到达 index.php 时,移动设备检测脚本会决定是从桌面站点还是移动站点加载内容。

【问题讨论】:

  • 这个 .htaccess 文件在哪里?在站点的文档根目录中,还是在 mob 子文件夹中?
  • 移动网站是否有单独的子域,例如m.domain.com?还是仅用作domain.com/mob?您还可以从/mob 文件夹中提供现有的.htaccess 吗?
  • 哦,我明白了,但是为什么要将所有流量从移动站点无条件地重定向到主站点?
  • @anubhava public_html 目录中的 index.php 包含一个移动设备检测脚本,用于确定要加载的内容(移动/桌面)。移动网站使用与桌面网站相同的代码库。
  • 下车并且您只想要内部重写? (我的意思是不改变浏览器中的 URL)?

标签: apache .htaccess mod-rewrite


【解决方案1】:
  • 检查您的m.domain.com 中的DOCUMENT_ROOT

如果你的m.domain.comDOCUMENT_ROOT/public_html/mob,那么如果不完全重定向(或代理)到http://domain.com/index.php,你就无法加载/public_html/index.php

  • 澄清一下,任何网站都不能访问高于其DOCUMENT_ROOT 文件夹级别的文件。

【讨论】:

    【解决方案2】:

    如果您的规则目标以/ 开头,则它是从文档根 开始的绝对URI,我假设它是public_html 文件夹:

    RewriteRule ^(/)?$ /index.php
    

    【讨论】:

    • 肯定需要上个目录。只使用 / 而不是 ../ 会导致 404 not found。
    猜你喜欢
    • 1970-01-01
    • 2013-02-24
    • 2011-07-20
    • 2015-11-06
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多