我有一个运行了一年的网站。我更改了域名,托管公司将所有数据复制到了新的托管帐户。该网站运行了几天。现在,无需进行任何更改,我有一个500 Internal Server Error
。
错误日志显示:
/home/website/public_html/.htaccess: RewriteRule:错误的标志分隔符
.htaccess
文件夹中的文件内容如下public_html
:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?website.com$
RewriteCond %{REQUEST_URI} !^/cmsfolder/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /cmsfolder/$1
RewriteCond %{HTTP_HOST} ^(www.)?website.com$
RewriteRule ^(/)?$ cmsfolder/index.php [L]Options +Indexes
Options +Indexes
IndexOptions -FancyIndexing
我没有改变任何东西,所以我不确定为什么网站会切换到 500 服务器错误。
说实话,我不知道用它做什么,托管公司似乎也不知道。
答案1
RewriteRule ^(/)?$ cmsfolder/index.php [L]Options +Indexes
这将导致“RewriteRule:坏标志分隔符”错误,因为[L]Options
不是有效的旗帜参数。这是两个连接在一起的指令。Options +Indexes
是一个完全独立的指令,下一行已经有了,因此只需将其删除即可:
RewriteRule ^(/)?$ cmsfolder/index.php [L]
这是托管公司前几天做的事情,尽管他们这样做之后它一直有效。
正如所写的那样,这会立即损坏 - 因此一定发生了一些变化。
如果文件没有被明确编辑,那么我的猜测该.htaccess
文件是否已被重新上传并且行尾被 FTP 软件错误地转换(也许在编辑文件时混合了不同的行尾)?
仅供参考(如果该指令最初是这样写的),以下内容(带有空间[L]
和之间Options
) 将不是导致了这样的错误:
RewriteRule ^(/)?$ cmsfolder/index.php [L] Options +Indexes
因为空格是 Apache 配置文件中的分隔符,并且最后一个参数之后的所有内容(即)[L]
都会被忽略。