【问题标题】:Redirecting a URL to a folder in DocumentRoot?将 URL 重定向到 DocumentRoot 中的文件夹?
【发布时间】:2012-08-09 03:05:35
【问题描述】:

我的文档根目录中有三个文件夹 -

localhost/myMainProject/   
localhost/myMainProjectSubdomain/  
localhost/myThirdProject/

我想做下面的URL映射-

www.mymainproject.com ---> localhost/myMainProject/
mysubdomain.mymainproject.com ---> localhost/myMainProjectSubdomain/
www.mythirdproject.com ---> localhost/myThirdProject/

我试图将我的主机文件更改为:

127.0.0.1/myMainProjectSubdomain mysubdomain.mymainproject.com
127.0.0.1/myMainProject www.mymainproject.com 
127.0.0.1/myThirdProject www.mythirdproject.com

但这不起作用。我想我必须在某个地方创建一些 .htaccess 文件或其他东西,但不知道它是如何工作的。

这可能吗?请指导我如何实现这一目标。谢谢。

【问题讨论】:

    标签: apache url-rewriting rewrite localhost


    【解决方案1】:

    把它放在文档根目录下的 htaccess 文件中:

    RewriteEngine On
    
    # for www.mymainproject.com
    RewriteCond %{HTTP_HOST} ^(www\.)?mymainproject\.com$ [NC]
    RewriteCond %{REQUEST_URI} !^/myMainProject
    RewriteRule ^(.*)$ /myMainProject/$1 [L]
    
    # for mysubdomain.mymainproject.com
    RewriteCond %{HTTP_HOST} ^mysubdomain.mymainproject\.com$ [NC]
    RewriteCond %{REQUEST_URI} !^/myMainProjectSubdomain
    RewriteRule ^(.*)$ /myMainProjectSubdomain/$1 [L]
    
    # for www.mythirdproject.com
    RewriteCond %{HTTP_HOST} ^(www\.)?mythirdproject\.com$ [NC]
    RewriteCond %{REQUEST_URI} !^/myThirdProject
    RewriteRule ^(.*)$ /myThirdProject/$1 [L]
    

    【讨论】:

    • 感谢您的快速回复。这适用于主 URL,即。 www.mymainproject.com、mysubdomain.mymainproject.com 和 www.mythirdproject.com 已正确映射。但是,当我尝试类似 www.mymainproject.com/index.php 时,它不会工作。我必须添加 www.mymainproject.com/myMainProject/index.php (我正在使用 CodeIgniter 但我认为这无关紧要)
    • @cyclotrojan 该规则专门匹配斜杠后的 everything(使用 ^(.*)$ 正则表达式)并将其重写为 /myMainProject/(使用 $1 附加它 反向引用)。所以你可以去www.mymainproject.com/qweadasdwqdasd,它会重写请求到/myMainProject/qweadasdwqdasd,即使它不存在。
    • 我的主机文件中仍然有这个映射 127.0.0.1 mysubdomain.mymainproject.com 127.0.0.1 www.mymainproject.com 127.0.0.1 www.mythirdproject.com
    • @cyclotrojan 你的 /etc/hosts 对为什么 ^(.*)$ 不匹配 /index.php 没有影响。
    • 非常感谢,现在可以使用了。我必须在我的 codeigniter 文件夹中创建另一个 .htaccess 文件以启用干净的 URL :) 现在 www.mymainproject.com/welcome 正确指向 localhost/myMainProject/welcome 干杯!!
    【解决方案2】:

    最后我是如何让它工作的:

    在主机文件中 -

    127.0.0.1 mysubdomain.mymainproject.com
    127.0.0.1 www.mymainproject.com 
    127.0.0.1 mymainproject.com 
    127.0.0.1 www.mythirdproject.com
    127.0.0.1 mythirdproject.com
    

    在文档根目录中-(如已接受的答案中所述)

    RewriteEngine On
    
    # for www.mymainproject.com
    RewriteCond %{HTTP_HOST} ^(www\.)?mymainproject\.com$ [NC]
    RewriteCond %{REQUEST_URI} !^/myMainProject
    RewriteRule ^(.*)$ /myMainProject/$1 [L]
    
    # for mysubdomain.mymainproject.com
    RewriteCond %{HTTP_HOST} ^mysubdomain.mymainproject\.com$ [NC]
    RewriteCond %{REQUEST_URI} !^/myMainProjectSubdomain
    RewriteRule ^(.*)$ /myMainProjectSubdomain/$1 [L]
    
    # for www.mythirdproject.com
    RewriteCond %{HTTP_HOST} ^(www\.)?mythirdproject\.com$ [NC]
    RewriteCond %{REQUEST_URI} !^/myThirdProject
    RewriteRule ^(.*)$ /myThirdProject/$1 [L]
    

    在我的项目文件夹中,我必须创建另一个 .htaccess 文件 -

    RewriteEngine on
    RewriteCond $1 !^(index\.php|resources|robots\.txt|images|stylesheets|javascript|captcha|js|css|table-images)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    

    现在 URL 映射完美! 例如。

    www.mymainproject.com/welcome --> localhost/myMainProject/welcome

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 2015-12-26
      • 2023-03-19
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      相关资源
      最近更新 更多