我有一个项目$_SERVER['PATH_INFO']
在加载页面时读取变量,因此它以以下格式读取页面http://地址/index.php/页面名称我想使用 mod_rewrite 删除 URL 的 index.php 部分,并使之前的 URLhttp://地址/页面名称.如果有人访问http://地址/页面名称,它需要加载页面,就像该人访问过一样http://地址/index.php/页面名称。
使用 Nginx,以下配置有效并执行重写...
server {
listen 80;
server_name localhost;
root /srv/http/web/html;
index index.php;
location ~ ^/[^/]+\.php($|/) {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(/[^/]+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
location ~ .* {
rewrite ^/(.*)$ /index.php/$1 last;
}
}
我如何在 apache 中实现这一点。我目前已使其正常运行,以便根目录正确显示,并且使用 index.php 部分写入 URL 也有效。我如何才能使重写规则正常工作,并且仍然能够使用变量$_SERVER['PATH_INFO']
?我可以在 .htaccess 中输入什么来使其正常工作?
答案1
$_SERVER["PATH_INFO"]
当 php 像模块一样被编译时,您无法直接从 apache 内部更改变量。
但这里有一个解决方法,可以很好地完成这项工作:
创建一个
rewrite_pathinfo.php
包含以下内容的文件:<?php if (!empty($_SERVER['PATH_INFO'])) header("Location: " . $_SERVER['PATH_INFO']); $_SERVER['PATH_INFO'] = $_SERVER['REDIRECT_ORIGINAL_PATH']; ?>
将其放入您的
.htaccess
:php_value auto_prepend_file "/var/www/vhosts/path_to_your/rewrite_pathinfo.php" RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) /index.php [QSA,L,PT,E=ORIGINAL_PATH:/$1]