我有一个.htaccess如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*) index.php [L]
</IfModule>
我的目录设置如下:
root directory:
html:
index.php
.htaccess
server (code):
site:
index.php
test.php
请求进入html / index.php,然后服务器在后端启动。调用$_SERVER['REQUEST_URI'];
会为http://localhost/
Request URL : /index.php
这是正确的,因为我可以在site / index.php上添加。但是,我也希望http://localhost/test
并将其更改为/site/test.php。以下是为$_SERVER['REQUEST_URI'];
http://localhost/test
时会发生的情况
Request URL : /testindex.php
应该发生什么Request URL : /test
所以我可以自己添加网站/ test.php。
谢谢!
答案 0 :(得分:1)
无法在document_root外部访问文件/目录。简单的解决方案是将index.php更新为路由器。然后路由器需要包含相应的文件(如果存在)。否则你需要处理文件不存在的情况,比如响应404错误。
您可能需要更新此.htaccess以将所有请求重定向到index.php:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
RewriteRule ^$ index.php [L]
RewriteRule ^(.*) index.php?route=$1 [QSA,L]
</IfModule>
然后,您可以在index.php中解析路由:
<?php
if (isset($_GET['route'])) {
$route = $_GET['route'];
if (file_exists(__DIR__.'/../site/' . $route)) {
include __DIR__.'/../site/' . $route;
}
}
?>