将URL重定向到ip / sub文件夹而不更改url

时间:2014-03-02 07:55:20

标签: .htaccess url redirect wamp moodle

我有一个带WAMP的本地Windows服务器,我在www文件夹中的这台服务器上安装了moodle。

所以你可以从这里访问moodle:78.93.44.123/moodle

我有一个带有Hostgator的cPanel帐户。

我希望我的学生可以从学院外面访问moodle网站:moodle.mcst.edu.sa而不是78.93.44.123/moodle。

即。我不希望他们看到IP地址。 因此,我在cPanel的高级DNS区域编辑器中添加了A记录,如下所示:

moodle.mcst.edu.sa => 78.93.44.123

这会将URL moodle.mcst.edu.sa重定向到服务器主页(www / index.php)。 实际上,我想重定向moodle.mcst.edu.sa => 78.93.44.123/moodle

所以,我已将www / index.php的内容更改为:

<?php
header( 'Localhost: /moodel' );
?>

这很好用。它重定向:moodle.mcst.edu.sa =&gt; 78.93.44.123/moodle

但问题是:网址更改为: moodle.mcst.edu.sa =&gt; 78.93.44.123/moodle

我不想要。我不希望用户在地址栏中看到IP。

如何防止更改网址?我应该使用.htaccess文件以及如何使用? 我做过的任何一个步骤?

请帮帮我

由于


注意:在www / moodle / config.php中我发誓:

$CFG->wwwroot = 'http://78.93.44.123/moodle';

1 个答案:

答案 0 :(得分:2)

我不确定moodle如何确定您输入的网址。您可以尝试以下方法(但我无法测试它是否真的有效):

将您的配置设为$CFG->wwwroot = 'http://moodle.mcst.edu.sa';

.htaccess文件放入www-root并将以下内容添加到其中:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/moodle
RewriteRule ^(.*)$ /moodle/$1 [L]

这是mod_rewrite的规则。

  1. 首先检查主机之间和查询字符串(asdf中的example.com/asdf?qwer=1)之间的网址是否可由正则表达式^(.*)$匹配。对于任何网址都是如此,这可能不会让您感到惊讶。整个网址存储为第一个捕获组(因为括号;它有preg-like syntax)。
  2. 然后检查所有条件是否都为真。 %{REQUEST_URI}是我们在步骤1中匹配的网址的一部分,但前缀为斜杠。我们检查是否已经开始使用/ moodle。这样我们就可以防止规则自身匹配,从而导致无限循环。
  3. 如果第2步为真,那么我们会将网址重写为/moodle/$1。在步骤1中,$1被第一个捕获组替换。标志[L]停止重写此循环,缺少[R]标志将使其成为内部重写(而不是外部重定向)。
  4. 下一个周期它将尝试再次执行所有这些步骤,但现在它将在步骤2中失败。内部重写的URL已经以/moodle开头,因此条件为false。