【发布时间】:2012-02-19 20:39:53
【问题描述】:
我的 .htaccess 重写器之一有问题:
服务器详情:
服务器运行 LiteSpeed Webserver 而不是 Apache,根据我的主机提供商的说法,它与 apache mod_rewrite 100% 兼容。
问题:
使用此代码时出现 500 内部服务器错误:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).mysite.com$ [NC]
RewriteRule ^(.*)$ %2/$1 [L,QSA,NC]
</IfModule>
当我使用此代码时,它几乎可以完成预期的工作,它将流量从任何子域重定向到具有文件请求的相应子文件夹。没有错误,没有什么,它可以正常工作,但它也会更改我不希望的浏览器地址。
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).mysite.com$ [NC]
RewriteRule ^(.*)$ http://mysite.com/%2/$1 [L,QSA,NC]
</IfModule>
有什么想法吗?
Editetd:我想提一提的是,我使用通配符 DNS,子域实际上并不存在。 再次编辑: RewriteRule ^(.*)$ %2/index.php [L,QSA,NC] 如果我使用此规则并尝试访问 http://sub.mysite.com/whatever 它成功将其重定向到 http://mysite.com/sub/index.php 我不明白这就是为什么当我更改它们时它不能使用 $1 而不是 index.php 我得到 500 内部服务器错误。
现在得到解决方案:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{HTTP_HOST} ^(.*)mysite\.com$ [NC]
RewriteCond %{HTTP_HOST} !^www\.* [NC]
RewriteRule ^(.*)$ http://www.%1mysite.com/$1 [R=301,L,QSA] [NC]
RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).mysite.com$ [NC]
RewriteCond %2==$1 !^(.*)==\1
RewriteRule ^(.*) %2/$1$2$3 [L,QSA,NC]
</IfModule>
【问题讨论】:
-
服务器的 500 个错误检查错误日志 - 他们会告诉你一切。
标签: .htaccess mod-rewrite