您真正想要的是具有默认类型的“回顾”支持。像这样设置你的 Apache 虚拟主机(东西):
<VirtualHost *:80>
ServerName example.com:80
ServerAlias www.example.com
DocumentRoot "/path/to/root/dir"
AddDefaultCharset UTF-8
ErrorDocument 403 "/403.php"
ErrorDocument 404 "/404.php"
<Directory /path/to/root/dir>
Options Indexes FollowSymLinks
DefaultType application/x-httpd-php
AllowOverride All
Order deny,allow
Allow from all
AddOutputFilterByType DEFLATE application/javascript text/css text/html text/plain text/xml
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !.index.ph.*
RewriteRule ^(.*)$ /index.php
</Directory>
</VirtualHost>
重要的一行是DefaultType application/x-httpd-php
,这意味着您现在可以摆脱.php
文件扩展名。
您现在可以使用类似的 URL http://example.com/this_is_a_php_page
,也可以使用http://example.com/this_is_a_php_page/with_a_path_info_var
.
因此,在this_is_a_php_page
(实际上是一个没有扩展名的 .php 文件)上,您可以使用它$_SERVER['PATH_INFO']
来检查在 URI 中传递的变量和变量。
编辑:
添加了RewriteEngine
and 规则以将所有内容推送到index.php
. 这意味着您现在在服务器上有一个(真实的)单页,index.php
它需要检查$_SERVER['REDIRECT_URL']
var 以了解真正请求的内容。
例如,http://example.com/a_page
现在将加载一个请求index.php
并a_page
传递给$_SERVER['REDIRECT_URL']
. 注意:此解决方案会将所有内容推送到 index.php。您将需要包括一个例外,如:
RewriteCond %{REQUEST_FILENAME} !.not_me_plz.*
not_me_plz
允许“按预期”提供以文件开头的所有文件。