在现代Web开发中,使用框架和MVC模式已经成为主流趋势。而PHP作为最流行的Web开发语言之一,也推出了许多流行的框架,如Laravel, Yii, CodeIgniter等等。这些框架通常需要将路由转发至控制器进行处理,而默认情况下,PHP项目的URL包含了index.php这个入口文件。这不仅对美观性造成影响,更影响了SEO。所以,本文将通过nginx去除PHP项目中的index.php,以优化URL。
首先,我们需要在nginx中配置重写规则。具体来说,就是让nginx将所有带有index.php的URL重写为不包含index.php的URL。以下是示例配置代码:
location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; try_files $uri =404; }其中,第一个location块用来处理所有非.php结尾的URL,其实就是将请求指向index.php。而第二个和第三个location块用来处理PHP请求,将nginx中的URL地址重写为不包含index.php的地址。 相信大家都听说过301和302跳转,它们分别代表永久重定向和临时重定向。301重定向就是要求搜索引擎收录新的URL地址,并告诉用户现有的页面已经永久下架了,不需要再浪费用户时间去访问;而302重定向就是暂时重定向,告诉搜索引擎,当前URL还在使用,只是将这些访问请求暂时重定向到新的URL地址,不会影响搜索引擎中原有的URL记录。所以,对于我们在nginx中去除index.php的操作,推荐使用301永久重定向,以便SEO优化。 下面我们将在nginx的server块中进行相关配置。例如,当我们访问example.com/index.php时,将自动重定向到example.com。代码如下:
server { listen 80; server_name example.com www.example.com; root /wwwroot/liushijie; index index.php index.html index.htm; if ($request_uri ~* "^(.*/)index\.php$") { return 301 $1; } location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; fastcgi_pass unix:/run/php-fpm.sock; include fastcgi_params; } error_page 404 /404.html; location = /404.html { internal; } }以上代码中,当请求的地址是包含index.php的,就使用301永久重定向方式,重定向到不包含index.php的地址。同时,保留原有的location块用于处理PHP请求,实现完整的URL去除index.php操作。 总结一下,在本文中,我们介绍了如何使用nginx去除index.php,从而实现更友好的URL地址,并提高SEO。同时,我们也介绍了如何在nginx中使用301永久重定向,进一步优化网站SEO。这些操作的实现都相对简单,而且能够带来明显的优化效果。因此,这些技术和方法值得Web开发人员们掌握。