伪静态URL分两种,以read.php页面为例,第一种是http://localhost/read.php/path/1234;第二种为http://localhost/read/path/1234。从隐私上来说,第二种更加彻底。下面来看看如何实现。以下代码在windows+apache2.4和群晖DSM7.2+apache2.4测试通过(均为php7)。
第一种效果
不需要动apache,只要在read.php中将下面path解释,然后实现你所需参数传递即可
$request = $_SERVER['REQUEST_URI'];
$path = parse_url($request, PHP_URL_PATH);
$path = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/';
访问地址:http://localhost/read.php/path/1234
第二种效果
分3步:
1、apache配置文件中启用mod_rewrite.so(确保mod_rewrite.so文件存在)
LoadModule rewrite_module modules/mod_rewrite.so
然后开启重写,将AllowOverride 从None更改为All,当然还有其他玩法,自己探索。
<Directory "网站目录">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
2、在网站跟目录下启用.htaccess文件,里面内容如下
<IfModule mod_rewrite.c>
RewriteEngine On
# 禁用MultiViews, 它会尝试自动匹配文件名,比如你访问 /read,它会尝试匹配 read.php,这会干扰重写规则的执行。
Options -MultiViews
# 只对以 /read/ 开头的请求进行处理
# RewriteCond %{REQUEST_URI} ^/read/(.*)$ [NC]
# 确保请求不是实际存在的文件或目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 将匹配的请求重定向到 read.php,并保持路径信息
RewriteRule ^read/(.*)$ /read.php/$1 [L,QSA]
</IfModule>
这里面有个我花了很长时间才实践出一个区别:
群晖系统中需要加 Options -MultiViews
windows中 可将Options -MultiViews替换为 RewriteCond %{REQUEST_URI} ^/read/(.*)$ [NC]
3、read.php页面内容同第一种
访问地址:http://localhost/read/path/1234
Comments | NOTHING