![Apache 配置文件无法正确处理 URL](https://linux22.com/image/713953/Apache%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%97%A0%E6%B3%95%E6%AD%A3%E7%A1%AE%E5%A4%84%E7%90%86%20URL.png)
最后编辑于 2017 年 11 月 27 日
我管理一组网站,全部是 HTTP,但现在我正在添加一个 HTTPS 网站。
我花了很多时间在 Windows 本地开发环境中的 Apach 配置文件上,尝试同时提供 HTTP 和 HTTPS 网站服务(这似乎比我的 WHM/cPanel 生产环境更难,我预计在那里不会出现问题)。
注意:这个问题不需要特殊的 Windows 知识——它可以类似地应用于 Linux。
我尝试过许多不同的指令顺序,以及许多其他变体。但都以不同的方式失败了。但我越来越接近了。
我想要的是像 localhost/spring 这样的 URL 能够正常工作(我所有的本地网站都在文件夹 C:\Web 下,相当于 URL localhost/)。
但我希望对我唯一的 HTTPS 网站 C:\Web\richard 进行特殊处理,使其等同于 localhost/richard。为了使这个本地网站成为 HTTPS,我使用了一种简单的方法,即编辑本地 HOSTS 文件,将我的安全域名 (richardjaybrown.com) 映射到本地计算机 (127.0.0.5)。然后,我可以使用 richardjaybrown.com(证书包括 www.richardjaybrown.com),而不是使用没有证书的 localhost/richard。
我使用本地环回地址 127.0.0.5 来提供不同的 IP 地址,以尝试帮助选择正确的 Apache 指令。
我相信,所有这些都是任何人都需要的简单、标准的东西,但我却无法让它们完全正常工作。
因为一些评论者希望在问题中了解详细信息,而不是在单独的 Pastebin 中,所以下面是详细信息:
1. Entire Apache config file
ServerAdmin "Local SYS5 Server (contact via www.springtimesoftware.com)"
ServerRoot "c:/Apache24"
# Main Server (and defaults?)
Listen 127.0.0.1:80
ServerName localhost
# http://localhost/WEBSITE is mapped to C:\Web\WEBSITE
DocumentRoot "c:/Web"
<Directory "c:/Web">
AllowOverride all
Require ip 127.0.0.1
Require host localhost
#Require ip 192.168.1.0/24
DirectoryIndex index.html
</Directory>
# Secure (SSL/TLS) connection for this secure (HTTPS) website
Listen 127.0.0.5:443
SSLSessionCache "shmcb:c:/Apache24/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
# see http://httpd.apache.org/docs/current/vhosts/examples.html
# Redirect all HTTP richardjaybrown.com URLs to the HTTPS version
<VirtualHost 127.0.0.5:80>
ServerName richardjaybrown.com
ServerAlias www.richardjaybrown.com
UseCanonicalName Off
RedirectMatch 301 ^/(.*)$ https://www.richardjaybrown.com/$1
</VirtualHost>
# Secure (SSL/TLS) connection for this secure (HTTPS) website
<VirtualHost 127.0.0.5:443>
ServerName www.richardjaybrown.com
ServerAlias richardjaybrown.com
UseCanonicalName Off
DocumentRoot "C:/Web/richard"
SSLEngine on
SSLCertificateFile "C:/Main/LocalCert/richard/richard.crt"
SSLCertificateKeyFile "C:/Main/LocalCert/richard/richard.key"
SSLCertificateChainFile "C:/Main/LocalCert/richard/LECA.crt"
</VirtualHost>
# Default security
#Require all denied
#AllowOverride none
#DirectoryIndex disabled
Options -Indexes -MultiViews +SymLinksIfOwnerMatch
AddDefaultCharset utf-8
# To prevent hang on any GET request (IE bug?):
AcceptFilter http none
AcceptFilter https none
# Modules used
#LoadModule access_compat_module modules/mod_access_compat.so for compatibility with Apache 2.2
LoadModule alias_module modules/mod_alias.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule log_debug_module modules/mod_log_debug.so
LoadModule mime_module modules/mod_mime.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error.log"
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access.log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ C:/Web/cgi-bin/
ScriptAlias cgi-bin/ C:/Web/cgi-bin/
</IfModule>
<Directory C:/Web/cgi-bin>
AllowOverride None
Options +ExecCGI
Require ip 127.0.0.1
Require host localhost
</Directory>
<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>
ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 405 /error.php
ErrorDocument 408 /error.php
ErrorDocument 409 /error.php
ErrorDocument 414 /error.php
ErrorDocument 500 /error.php
ErrorDocument 501 /error.php
ErrorDocument 503 /error.php
ErrorDocument 505 /error.php
# Always allow error page
<Files "/err.php">
Require ip 127.0.0.1
Require host localhost
</Files>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
#<Directory C:/>
# Allow from 127.0.0.1
# Allow from localhost
# Allow from 192.168.1.0/24
#</Directory>
# PHP
# Use PHP as a CGI binary:
#ScriptAlias /php "/Progra~2/PHP/"
#Action application/x-httpd-php "/php/php.exe "
# Use PHP as a module
#ds Must be full path for Apache:
LoadFile "C:/Progra~2/PHP/php5ts.dll"
LoadModule php5_module "C:/Progra~2/PHP/php5apache2_4.dll"
PHPIniDir "C:/Progra~2/PHP"
#AddHandler application/x-httpd-php .php
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
# Temporarily prevent all caching of served files
Header unset Cache-Control
# Set default basedirs for safety
php_value open_basedir "C:\Web;C:\ProgramData\MySQL\MySQL Server 5.6\data;"
2. HOSTS file
127.0.0.5 www.richardjaybrown.com richardjaybrown.com
3. .htaccess file in C:\Web\richard
DirectoryIndex index.html
3. Some Tests (browser URLs)
http://www.richardjaybrown.com/ should redirect to https://www.richardjaybrown.com/ locally
http://richardjaybrown.com/ should redirect to https://www.richardjaybrown.com/ locally
http://localhost/spring should redirect to http://localhost/spring locally
http://localhost should not redirect
http://localhost/web/site should not redirect
答案1
我认为要让它在本地工作,您不需要主机证书。另外,我认为您不需要 apache 配置文件。但如果您需要让您的网站在本地工作,您应该使用文件 hosts 并添加域名,这意味着您将编辑文件,Linux 中的 /etc/hosts,添加另一个 ip,例如:127.0.0.5 www.richardjaybrown.com 然后进入您的 apache 配置文件,然后当您在浏览器中添加 www.richardjaybrown.com 时,它将被重定向到您本地的 www.richardjaybrown.com,因为您已将这个名称添加到本地,如果搜索它,它将首先在您的计算机中解析,但使用此解决方案,您将无法访问您的生产网站:www.richardjaybrown.com