本地机器环境: <IfModule rewrite_module> RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule> 服务器环境: <IfModule rewrite_module> RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^/(.*)$ /index.php/$1 [QSA,PT,L] </IfModule> 很奇怪的问题,就一个thinkphp的重写规则,上面那个在本地机器上行,下面那个在服务器上行,但是如果调换一下就两个都不行了,好奇怪的斜杆。 url是 域名/products,错误提示是File not found.找不到文件,但是 域名/index.php/products能正常访问, 先说说环境配置,都是apache+php,本地机器是php作为apache的模块运行,而服务器上是php-fpm,用的是fastCGI模式运行。可能差别就在这里,照例系统本身不应该有差别,都是ubuntu14.04, 更奇怪的是服务器上的那个重写规则必须写到虚拟主机目录中去才行。如果只是放在.网站根目录下的.htaccess中,有没斜杠都不行,如下所示 <VirtualHost *:80> ServerName ···· ServerAdmin ···· DocumentRoot /var/www/··· <Directory /var/www/···> AllowOverride All # Options All Options -Indexes +FollowSymLinks +ExecCGI </Directory> <IfModule rewrite_module> RewriteEngine On RewriteRule \.(js|ico|gif|jpg|JPG|png|PNG|css|pdf|swf)$ - [L] RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^/(.*)$ /index.php/$1 [QSA,PT,L] </IfModule> <IfModule mod_fastcgi.c> ScriptAlias /php-fpm/ "/usr/local/php5.3/sbin/" FastCgiExternalServer /usr/local/php5.3/sbin/php-fpm -host 127.0.0.1:9000 AddHandler php-fastcgi .php Action php-fastcgi /php-fpm/php-fpm </IfModule> </VirtualHost> |
|