【问题标题】:Using mod_rewrite to redirect .dev domains使用 mod_rewrite 重定向 .dev 域
【发布时间】:2016-05-18 17:34:57
【问题描述】:

Apache 2.4 docs on dynamic virtual hosts 中,它说:

使用 mod_rewrite 的海量虚拟主机

大规模虚拟主机也可以使用 mod_rewrite 来完成,或者使用简单的 RewriteRule 指令,或者使用更复杂的技术,例如在外部存储虚拟主机定义并通过 RewriteMap 访问它们。这些技术在重写文档中进行了讨论。

我正在尝试使用 mod_rewrite 而不是 mod_vhost_alias,因为我想要两种方式:localhost/project 和 project.dev 应该指向同一个文件夹,但任何一个 URL 都应该可以工作。

这是我最近的尝试(目前在 .htaccess 中),它得到了一个可爱的 500 错误。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.dev$ [NC]
RewriteRule ^(.*)$ /%1/$1 [L,QSA]

如果我这样做

...
RewriteRule ^(.*)$ http://localhost/%1/$1 [L,QSA]

我可以访问这些文件,但是 URL 发生了变化(不是我想要的)。我尝试了各种带有和不带有斜杠、RewriteBase 等的排列。

明确地说,我希望project.dev/index.phplocalhost/project/index.php 都是对/var/www/html/project/index.php 的有效非重定向引用。而且我想以动态方式执行此操作,因此我不需要为每个文件夹输入一组新规则。

我并不专注于使用 .htaccess 执行此操作 - 虚拟主机也可以,只要它们是动态的,我仍然可以使用 localhost/ 方案访问我的站点,并且网络上的其他机器可以连接到示例以通常的方式访问网站 (192.168.1.22/project/index.php)。

【问题讨论】:

    标签: .htaccess mod-rewrite apache2.4


    【解决方案1】:

    试试这个规则:

    RewriteEngine on
    
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteCond %{HTTP_HOST} ^(.+)\.dev$ [NC]
    RewriteRule ^(.*)$ /%1/$1 [L]
    

    【讨论】:

    • 所以问题是它进入了无限循环,而不是简单地呈现页面。我假设因为我没有使用任何重定向规则,所以它只会通过一次,但事实并非如此。
    • 是的,RewriteCond %{ENV:REDIRECT_STATUS} ^$ 在第一次执行后停止此规则
    猜你喜欢
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2013-07-18
    • 2012-02-22
    • 2013-02-19
    • 2010-11-12
    相关资源
    最近更新 更多