Apache VirtualHost and localhost

风流意气都作罢 提交于 2019-12-17 17:24:53

问题


I'm working with XAMPP on Mac OS X. I'm trying to run properly a symfony website for a client, i really don't know (yet) symfony, i just want to install and launch it.

I've changed my etc/hosts this way:

127.0.0.1 www.mysite.local       

and the httpd.conf this way:

<VirtualHost *:80>
  ServerName www.mysite.local
  DocumentRoot /Applications/MAMP/htdocs/mysite/web
  DirectoryIndex index.php
  <Directory /Applications/MAMP/htdocs/mysite/web>
    AllowOverride All
    Allow from All
  </Directory>
  Alias /sf /Applications/MAMP/htdocs/mysite/lib/vendor/symfony/data/web/sf
  <Directory "/Applications/MAMP/htdocs/mysite/lib/vendor/symfony/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

Now, the site is working (yay!), but i can't access anymore none of my other local sites because localhost is rendered as www.mysite.local. Where i'm wrong?

Thank you!


回答1:


This is normal if you see it. Since it is the first virtual host entry it will show local host.

Lets say for example you didn't want that page to show. All you want to show is apache it works page so you would make a vhost entry before mysite.local as local host and point it to the it works page.

But this is normal. I had this problem before so don't worry!




回答2:


This worked for me!

To run projects like http://localhost/projectName

<VirtualHost localhost:80>
   ServerAdmin localhost
    DocumentRoot path/to/htdocs/
    ServerName localhost
</VirtualHost>

To run projects like http://somewebsite.com locally

<VirtualHost somewebsite.com:80>
     ServerAdmin webmaster@example.com
     DocumentRoot /path/to/htdocs/somewebsiteFolder
     ServerName www.somewebsite.com
     ServerAlias somewebsite.com
</VirtualHost>

Same for other websites

<VirtualHost anothersite.local:80>
     ServerAdmin webmaster@example.com
     DocumentRoot /path/to/htdocs/anotherSiteFolder
     ServerName www.anothersite.local
     ServerAlias anothersite.com
</VirtualHost>



回答3:


localhost will always redirect to 127.0.0.1. You can trick this by naming your other VirtualHost to other local loop-back address, such as 127.0.0.2. Make sure you also change the corresponding hosts file to implement this.

For example, my httpd-vhosts.conf looks like this:

<VirtualHost 127.0.0.2:80>
    DocumentRoot "D:/6. App Data/XAMPP Shared/htdocs/intranet"
    ServerName intranet.dev
    ServerAlias www.intranet.dev
    ErrorLog "logs/intranet.dev-error.log"
    CustomLog "logs/intranet.dec-access.log" combined

    <Directory "D:/6. App Data/XAMPP Shared/htdocs/intranet">
        Options Indexes FollowSymLinks ExecCGI Includes
        Order allow,deny
        Allow from all
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

(Notice that in <VirtualHost> section I typed 127.0.0.2:80. It means that this block of VirtualHost will only affects requests to IP address 127.0.0.2 port 80, which is the default port for HTTP.

To route the name intranet.dev properly, my hosts entry line is like this:

127.0.0.2 intranet.dev

This way, it will prevent you from creating another VirtualHost block for localhost, which is unnecessary.




回答4:


you may want to use this:

<VirtualHost *:80>
    DocumentRoot "somepath\Apache2.2\htdocs"
    ServerName localhost 
</VirtualHost>
<VirtualHost *:80>

as your first virtual host (place it before another vhosts)




回答5:


I had same issue of accessing localhost while working with virtualHost. I resolved by adding the name in virtualHost listen code like below-

In my hosts file, I have added below code (C:\Windows\System32\drivers\etc\hosts) -

127.0.0.1       main_live

And In my httpd.conf I have added below code -

<VirtualHost main_live:80>
    DocumentRoot H:/wamp/www/raj/main_live/
    ServerName main_live
</VirtualHost>

That's it. It works, I can use both localhost, phpmyadmin, as well as main_live(My virtual project) simultaneously.




回答6:


Additional description for John Smith answer from official documentation. To understand why it is.

Main host goes away

If you are adding virtual hosts to an existing web server, you must also create a block for the existing host. The ServerName and DocumentRoot included in this virtual host should be the same as the global ServerName and DocumentRoot. List this virtual host first in the configuration file so that it will act as the default host.

For example to work properly with XAMPP, to prevent VirtualHost override main host, add follow lines into httpd-vhosts.conf

# Main host
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/xampp/htdocs"
</VirtualHost>

# Additional host
<VirtualHost *:80>
    # over directives there
</VirtualHost>



回答7:


For someone doing everything descripted here and still cant access:
Xampp with apache 2.4:

on httpd-vhost.conf

<VirtualHost *>
    DocumentRoot "D:/xampp/htdocs/dir"
    ServerName something.dev
   <Directory "D:/xampp/htdocs/dir">
    Require all granted #apache v 2.4.4 uses just this
   </Directory>
</VirtualHost>


No need for port, or ip here, apache configure it on its own files. No need for NameVirtualHost *:80, its deprecated, you can use it, but make no difference.

Then to edit hosts, you MUST RUN NOTEPAD AS ADMINISTRATOR (DESCRIBED BELLOW), if you where editing the file without doing this, you are editing a pseudo file, not the original (yes, it saves and shit, but its not the real file)
In windows:

Find notepad icon, right click, run as administrator, open file, go to c:/windows/system32/driver/etc/hosts, check "see all files", open hosts.

If you where editing it before, probably you will see its not the file you were previously editing when not running as administrator.

Then to check if Apache is reading your httpd-vhost.conf , go to xampFolder/apache/bin, shift + right click, open terminal command here, open xampp (as you usually do), start apache, then on the command line, type httpd -S , you will see a list of the virtual hosts, just check if your something.dev is there.




回答8:


Just change <VirtualHost *:80> to <VirtualHost 127.0.0.1:80>.

Then default DocumentRoot will serve for all domains or IPs that point to your server and specified VirtualHost will work.




回答9:


According to this documentation: Name-based Virtual Host Support

You may be missing the following directive:

NameVirtualHost *:80



回答10:


it may be because your web folder (as mentioned "/Applications/MAMP/htdocs/mysite/web") is empty.

My suggestion is first to make your project and then work on making virtual host. I went with similar situation. I was using an empty folder in the DocumentRoot in httpd-vhosts.confiz and I cant access my shahg101.com site




回答11:


I am running Ubuntu 16.04, this is what worked for me:

  1. Open up a terminal and cd to /etc/apache2/sites-available. There you will find a file called 000-default.conf.
  2. Copy that file: cp 000-default.conf example.local.conf
  3. Open that new file (I use Nano; use what you are comfortable with).
  4. You will see a lot of commented lines, which you can delete.
  5. Change <VirtualHost *:80> to <VirtualHost example.local:80>
  6. Change the document root to reflect the location of your files.
  7. Add the following line: ServerName example.local And if you need to, add this line: ServerAlias www.example.local
  8. Save the file and restart Apache: service Apache2 restart

Open a browser and navigate to example.local. You should see your website.



来源:https://stackoverflow.com/questions/10981174/apache-virtualhost-and-localhost

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!