下面我将分步骤、分场景为您详细讲解。
这是最关键的一步,因为Nginx和Apache的配置方法完全不同。
1、登录您的云主机(通过SSH或远程桌面)。
2、查看服务器软件:
Linux系统通常可以通过nginx -v
或apache2 -v
/httpd -v
命令来查看,如果命令不存在,可以查看运行中的进程ps aux | grep -E ‘(nginx|apache|httpd)’
。
Windows系统通常通过服务器管理器或任务管理器查看,常见的是IIS,但国内云主机用Nginx或Apache的也很多。
Nginx的伪静态规则需要在服务器配置块(Server Block),也就是虚拟主机配置文件中设置。
1、找到配置文件:
* 配置文件通常位于/etc/nginx/nginx.conf
或/etc/nginx/conf.d/
目录下,以及/etc/nginx/sites-enabled/
目录下。
* 您的网站通常会有一个独立的配置文件,例如/etc/nginx/sites-enabled/your_domain.conf
。
2、编辑配置文件:
* 使用文本编辑器(如vim
或nano
)打开配置文件。
sudo vim /etc/nginx/sites-enabled/your_domain.conf
3、添加location /
块和try_files
指令:
* 在server { ... }
块内,找到处理根路径的location /
部分,如果不存在,就自己添加一个。
* 核心是使用try_files
指令,它的作用是按顺序检查文件是否存在,如果都不存在,则将请求转发给一个指定的后备文件(通常是网站的入口文件,如index.php
)。
通用模板:
server { listen 80; server_name your_domain.com; root /var/www/your_website_root; # 你的网站根目录 index index.html index.php; location / { # 核心伪静态规则:尝试访问原始URI,如果没有则尝试目录,最后全部交给index.php处理 try_files $uri $uri/ /index.php?$query_string; } # 处理PHP文件的Location块(必须存在,伪静态才有效) location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 这里的PHP版本和路径可能不同 } # ... 其他配置 ... }
4、使用特定程序的规则:
WordPress
location / { try_files $uri $uri/ /index.php$is_args$args; }
Laravel
location / { try_files $uri $uri/ /index.php?$query_string; }
ThinkPHP
location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } }
5、测试并重载配置:
测试配置语法是否正确
sudo nginx -t
如果显示syntax is ok
和test is successful
,则重载Nginx使配置生效
sudo systemctl reload nginx
Apache的伪静态通常通过网站根目录下的.htaccess
文件来管理。
1、确保开启重写模块:
通常默认是开启的,如果没有,需要执行
# 启用mod_rewrite模块 sudo a2enmod rewrite sudo systemctl restart apache2
2、确保虚拟主机配置允许.htaccess重写:
* 找到您的Apache虚拟主机配置文件(如/etc/apache2/sites-enabled/000-default.conf
)。
* 确保对应的<Directory /var/www/html>
块中,AllowOverride
设置为All
(而不仅仅是None
)。
<VirtualHost *:80> ... <Directory /var/www/your_website_root> Options Indexes FollowSymLinks AllowOverride All # 这一行必须是 All Require all granted </Directory> </VirtualHost>
修改后需要重启Apachesudo systemctl restart apache2
3、创建或编辑.htaccess
文件:
* 在您的网站根目录下,创建或编辑一个名为.htaccess
的文件(注意前面有个点)。
* 这个文件是隐藏文件,可能需要使用ls -a
命令才能看到。
4、写入重写规则:
* 开启重写引擎并添加规则。
通用模板:
<IfModule mod_rewrite.c> RewriteEngine On # 如果请求的不是一个真实存在的文件 RewriteCond %{REQUEST_FILENAME} !-f # 如果请求的不是一个真实存在的目录 RewriteCond %{REQUEST_FILENAME} !-d # 则将请求重写到 index.php RewriteRule ^(.*)$ index.php?$1 [L,QSA] </IfModule>
5、使用特定程序的规则:
WordPressWordPress自带.htaccess
规则,安装或更新固定链接时会自动生成。
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
Laravel
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # 处理授权头 RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 重定向尾部带斜杠的URL(foo/ 到 /foo) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # 发送请求到前端控制器... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
ThinkPHP
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L] </IfModule>
配置完成后,访问您网站的一个“漂亮”的URL(例如https://yourdomain.com/about
),如果它能正确显示内容,而不是出现404错误,说明伪静态已经生效。
1、备份!备份!备份!:在修改任何服务器配置文件之前,务必备份原文件。
2、程序特定规则:大多数现代PHP框架和CMS(内容管理系统)都会在官方文档中提供针对Nginx和Apache的推荐伪静态配置。直接使用官方提供的规则是最可靠的做法。
3、权限问题:确保.htaccess
文件(对于Apache)或Nginx的网站根目录有正确的读取权限。
4、使用宝塔面板:如果您觉得命令行操作困难,很多云主机用户会选择安装宝塔面板,在宝塔面板中,设置伪静态非常简单:
* 进入网站管理界面。
* 点击“设置”。
* 选择“伪静态”选项卡。
* 从下拉菜单中选择您使用的程序(如WordPress、ThinkPHP等),面板会自动填入对应的规则,或者您也可以手动输入自定义规则。
* 保存即可。
设置伪静态的核心流程就是:确定服务器类型 -> 找到对应的配置文件 -> 填入正确的规则 -> 重启/重载服务生效,希望这份详细的指南能帮助您顺利完成设置!
文章摘自:https://idc.huochengrm.cn/zj/17402.html
评论