.htaccess 将所有 url 重定向到 public/index.php,本地主机上没有反斜杠

背景

我正在我的本地主机 (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]


希望有人可以解决尾随斜杠目录根问题,或者至少确认这是不可能的。在这一点上,正确答案属于任何可以解释我的错误并将其变成有用帖子的人。


qq_笑_17
浏览 561回答 2
2回答

www说

在 RewriteEngine 打开后立即尝试此操作RewriteRule ^(.*)/$ /$1 [L,R=301]

红糖糍粑

尝试这个。将您的 .htaccess 文件放在 time-tracker 文件夹中&nbsp;&nbsp;RewriteOptions&nbsp;inherit &nbsp;&nbsp;&nbsp;&nbsp;<IfModule&nbsp;mod_rewrite.c> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RewriteEngine&nbsp;on&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RewriteBase&nbsp;/time-tracker/public/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RewriteCond&nbsp;%{REQUEST_FILENAME}&nbsp;!-f&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RewriteCond&nbsp;%{REQUEST_FILENAME}&nbsp;!-d&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RewriteRule&nbsp;^(.*)$&nbsp;index.php?/$1&nbsp;[L] &nbsp;&nbsp;&nbsp;&nbsp;</IfModule>
打开App,查看更多内容
随时随地看视频慕课网APP