Apache 配置文件无法正确处理 URL

Apache 配置文件无法正确处理 URL

最后编辑于 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

相关内容