我正在与客户合作,最近我们将他们的网站从Godaddy(ew!)移到了Pair Networks。我已经使用Pair个人和客户多年,并与他们有很好的经验。不幸的是,对于这个问题,因为它是一个共享的托管计划,URL重写技术支持不属于支持计划。
无论如何,只要我们将网站移动到根目录中的重写规则.htaccess就不再有效了。 .htaccess包含:
RewriteEngine On
RewriteRule ^((images|styles|scripts|documents)/*.*)$ $1 [L]
RewriteRule ^(admin/*)$ index.php/$1 [L]
RewriteRule ^([a-zA-Z0-9]+)$ page/id/$1
RewriteCond $1 !^(index\.php|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ index.php/$1 [L]
根据Apache的错误是重定向太多导致显示错误500。如果我发表评论:
#RewriteRule ^(.*)$ index.php/$1 [L]
然后加载默认页面(如果URL中没有指定,则index.php设置默认值),但是其他页面都不能加载。我必须手动将每种URL格式的条目添加到.htaccess以保持网站正常运行,从而产生以下结果:
RewriteEngine On
RewriteRule ^((images|styles|scripts|documents)/*.*)$ $1 [L]
RewriteRule ^(admin/*)$ index.php/$1 [L]
RewriteRule ^(admin/([a-zA-Z0-9]+))$ index.php/$1 [L]
RewriteRule ^(admin/([a-zA-Z0-9]+)/([a-zA-Z0-9]+))$ index.php/$1 [L]
RewriteRule ^(page/id/*)$ index.php/$1 [L]
RewriteRule ^(page/submit)$ index.php/page/submit [L]
RewriteRule ^([a-zA-Z0-9]+)$ index.php/page/id/$1
RewriteCond $1 !^(index\.php|robots\.txt|favicon\.ico)
#RewriteRule ^(.*)$ index.php/$1 [L]
该网站使用Codeigniter,因此预期的最终重写网址格式为:http://server/index.php/page/id/example
以加载http://server/example
。
我在Pair服务器上有另一个客户端使用完全相同的CMS和相同的原始.htaccess大约6年没有问题,所以我有点惊讶于为什么这会突然导致问题。他们甚至使用相同版本的Apache和PHP(分别为2.2.22和5.3.8)。
有没有人对这个问题有什么想法?我更喜欢不必像这样手动定义所有路线。
答案 0 :(得分:3)
我们多年来一直使用非常相似的规则,没有问题。除了我们在该行之前有两个RewriteCond规则,以检查请求是否不适用于文件或目录:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]