问题
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:
- Open up a terminal and cd to
/etc/apache2/sites-available
. There you will find a file called000-default.conf
. - Copy that file:
cp 000-default.conf example.local.conf
- Open that new file (I use Nano; use what you are comfortable with).
- You will see a lot of commented lines, which you can delete.
- Change
<VirtualHost *:80>
to<VirtualHost example.local:80>
- Change the document root to reflect the location of your files.
- Add the following line:
ServerName example.local
And if you need to, add this line:ServerAlias www.example.local
- 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