我正在尝试将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>
答案 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}指令。