Apache 301重定向问题 - 在cPanel / Apache更新之前工作

时间:2017-04-30 22:20:52

标签: apache .htaccess redirect mod-rewrite

我正在尝试将http://subdomain.example.com/oldpage.jsp重定向到http://example.com/new-page

以下重定向已经工作多年,但在最新的cPanel / Apache更新后它停止工作。我试图解决它,但没有成功。我做的任何事情只是重定向到http://example.com/oldpage.jsp而不是http://example.com/new-page

此重定向之前有效。我需要重定向一个特定页面,因为页面名称已经发生了变化,而不是其他所有页面。

RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.subdomain\.example\.com$
RewriteRule ^oldpage\.jsp$ "http\:\/\/example\.com\/new\-page" [R=301,L]

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com  [OR]
RewriteCond %{HTTP_HOST} ^www\.subdomain\.example\.com
RewriteRule ^\/?(.*)$ http://example.com/$1 [R=301,L]

我的httpd.conf部分包含example.com虚拟主机的主要主机:

<VirtualHost my_ip_address_here:80>
    ServerName example.com
    ServerAlias mail.example.com www.example.com
    DocumentRoot /home/myuser/public_html/ROOT/main_project/ROOT
    UseCanonicalName Off
    Include "/usr/local/apache/conf/userdata/std/2/myuser/example.com/*.conf"
</VirtualHost>

和子域名:

<VirtualHost my_ip_address_here:80>
    ServerName subdomain.example.com
    ServerAlias www.subdomain.example.com
    DocumentRoot /home/myuser/public_html/ROOT/project/ROOT

    <Directory "/home/myuser/public_html/ROOT/project">
        Options +FollowSymlinks +Indexes
        AllowOverride all
    </Directory>

    UseCanonicalName On
    UserDir disabled
    UserDir enabled myuser

    Include "/usr/local/apache/conf/userdata/std/2/myuser/subdomain.example.com/*.conf"
</VirtualHost>

我在httpd.conf的开头也有这个:

<Directory "/">
    Options ExecCGI FollowSymLinks IncludesNOEXEC Indexes SymLinksIfOwnerMatch
    AllowOverride None
</Directory>

<Directory "/usr/local/apache/htdocs">
    Options Includes Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

1 个答案:

答案 0 :(得分:1)

尝试设置mod_rewrite所需的FollowSymLinks。 (服务器更新可能已更改服务器配置中的默认设置。)

Options +FollowSymLinks

否则......这是.htaccess吗?你有其他指令吗?你发布的指令没有什么特别的错误。你确认mod_rewrite等已启用并正常工作吗?

已修订更新:

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.subdomain\.example\.com$
RewriteRule ^oldpage\.jsp$ "http\:\/\/example\.com\/new\-page" [R=301,L]

如果这包含在虚拟主机上下文中,那么RewriteRule 模式不正确,则需要斜杠前缀。 (此模式仅适用于目录/ .htaccess上下文。)

尝试将其更改为:

RewriteCond %{HTTP_HOST} ^(www\.)?subdomain\.example\.com [NC]
RewriteRule ^/oldpage\.jsp$ http://example.com/new-page [R=301,L]

请注意RewriteRule 模式上的斜杠前缀。我还从 CondPattern 中删除了尾随$,合并了RewriteCond指令并删除了RewriteRule 替换中的所有不必要的转义

但是,如果这些指令位于仅包含在subdomain.example.com虚拟主机中的包含中,那么条件是不必要的......您只需要{{1}指令。