背景
我正在我的本地主机 (MAMP) 上使用 PHP 创建一个时间跟踪应用程序。应用程序结构如下
htdocs/time-tracker/public/index.php
问题
无论我尝试了多少配置,我似乎都无法避免 URL 出现某种奇怪的故障。
我需要的
我想要以下结果。当我访问127.0.0.1:8888/time-tracker本地机器上的 url时,我触发了 php 应用程序,通过htdocs/time-tracker/public/index.php. 最好没有尾部斜杠,但优先级只是让应用程序工作。
我当前的 .htaccess 文件
RewriteEngine On
RewriteBase /time-tracker/
RewriteRule ^public\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /public [L]
更新
1. $_GET 参数改变结果
出于某种原因http://127.0.0.1:8888/time-tracker?debug=true,http://127.0.0.1:8888/time-tracker让我得到不同的结果。
http://127.0.0.1:8888/time-tracker?debug=true 导致重定向到 http://127.0.0.1:8888/public
http://127.0.0.1:8888/time-tracker 导致重定向到 http://127.0.0.1:8888/Users/etc/etc/htdocs/time-tracker/public
这些结果都不是我想要的。
2. 部分工作
.htaccess每当我在 $_GET 中放入一些东西时,这个文件就会使我的重定向工作
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ public/index.php [L]
例如,127.0.0.1:8888/time-tracker/?test=test工作时127.0.0.1:8888/time-tracker/仍然重定向到http://127.0.0.1:8888/Users/etc/etc/htdocs/time-tracker/public
3. 没有在 root 上正确重定向
重定向适用于除根路径之外的所有路径。例如,127.0.0.1:8888/time-tracker/test并且127.0.0.1:8888/time-tracker/?test=test都工作,只是不127.0.0.1:8888/time-tracker/
我不知道为什么我的正则表达式不接受这个。这是我的代码
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* public/index.php [L]
4. 看到一个空的路径名
我已经追踪到最后一个问题:空路径不注册重定向。
# Settings
Options +FollowSymLinks
DirectorySlash Off
RewriteEngine On
# Rules
RewriteBase /time-tracker/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*|x) index.php?/var=$1 [L]
出于某种原因,如果路径为空,它就无法捕获重定向。
5.关闭足够的解决方案
这是我得到的最好的。这实际上是有效的,但我无法解决尾部斜杠问题。
# Settings
DirectorySlash On
RewriteEngine On
# Rewrite
RewriteBase /time-tracker/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php?/var=$1 [L]
希望有人可以解决尾随斜杠目录根问题,或者至少确认这是不可能的。在这一点上,正确答案属于任何可以解释我的错误并将其变成有用帖子的人。
www说
红糖糍粑