好吧,情况是这样的:我以前在 bluehost 上托管我的 codeigniter 网站,当时我没有 root 访问权限,后来我把该网站移到了 rackspace。我没有更改任何 PHP 代码,但出现了一些意外行为。
意外行为:
http://mysite.com/robots.txt 新旧版本均已解析 robots 文件
http://mysite.com/robots.txt/ 旧的 bluehost 设置解析为我的 codeigniter 404 错误页面。rackspace 配置解析为:未找到该服务器上未找到所请求的 URL /robots.txt/。
**这个例子让我相信我的 mod 重写可能有问题或缺少重写。第一个通过 php 正确生成错误,而第二个场景似乎让服务器处理此错误。
这个问题的下一个例子更令人不安:'http://mysite.com/search/term/9x 1-1%2F2 白色/'
新网站带来以下结果:错误的请求您的浏览器发送了一个该服务器无法理解的请求。
旧网站导致:实际页面正在加载并且搜索词未编码。
我不得不假设这与以下事实有关:当我转到新服务器时,我从根级 htaccess 文件转到 httpd.conf 文件以及虚拟服务器 default 和 default-ssl。它们如下:
默认文件:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mysite.com
DocumentRoot /var/www
<Directory />
Options +FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www>
Options -Indexes +FollowSymLinks -MultiViews
AllowOverride None
Order allow,deny
allow from all
RewriteEngine On
RewriteBase /
# force no www. (also does the IP thing)
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^mysite\.com [NC]
RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
# index.php remove any index.php parts
RewriteCond %{THE_REQUEST} /index\.(php|html)
RewriteRule (.*)index\.(php|html)(.*)$ /$1$3 [r=301,L]
RewriteCond $1 !^(index\.php|assets|robots\.txt|sitemap\.xml|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Default-ssl 文件 基本与上面的默认文件相同,仅用于处理 ssl 端口
httpd.conf 文件 这只是来自 html5 样板的大量内容,如果需要的话我会发布它
旧的 htaccess 文件
<IfModule mod_rewrite.c>
# index.php remove any index.php parts
RewriteCond %{THE_REQUEST} /index\.(php|html)
RewriteRule (.*)index\.(php|html)(.*)$ /$1$3 [r=301,L]
RewriteCond $1 !^(index\.php|assets|robots\.txt|sitemap\.xml|favicon\.ico)
RewriteRule ^(.*)/$ /$1 [r=301,L]
RewriteCond $1 !^(index\.php|assets|robots\.txt|sitemap\.xml|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
这是负责将每个请求定向到 index.php 文件的重定向...我认为这是问题所在(可能与目录有关?也许与我的 apache 配置有关?
RewriteCond $1 !^(index.php|assets|robots.txt|sitemap.xml|favicon.ico)
重写规则 ^(.*)$ /index.php/$1 [L]
如能提供任何帮助我将非常感激!!