为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
qq_笑_17 2021-08-28 17:21:14
背景我正在我的本地主机 (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 OnRewriteBase /time-tracker/RewriteRule ^public\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /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/publichttp://127.0.0.1:8888/time-tracker 导致重定向到 http://127.0.0.1:8888/Users/etc/etc/htdocs/time-tracker/public这些结果都不是我想要的。2. 部分工作.htaccess每当我在 $_GET 中放入一些东西时,这个文件就会使我的重定向工作Options +FollowSymLinksRewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ 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/public3. 没有在 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 +FollowSymLinksRewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteRule .* public/index.php [L]4. 看到一个空的路径名我已经追踪到最后一个问题:空路径不注册重定向。# SettingsOptions +FollowSymLinksDirectorySlash OffRewriteEngine On# RulesRewriteBase /time-tracker/public/RewriteCond %{REQUEST_FILENAME} !-fRewriteRule (.*|x) index.php?/var=$1 [L]出于某种原因,如果路径为空,它就无法捕获重定向。5.关闭足够的解决方案这是我得到的最好的。这实际上是有效的,但我无法解决尾部斜杠问题。# SettingsDirectorySlash OnRewriteEngine On# RewriteRewriteBase /time-tracker/public/RewriteCond %{REQUEST_FILENAME} !-fRewriteRule (.*) index.php?/var=$1 [L]希望有人可以解决尾随斜杠目录根问题,或者至少确认这是不可能的。在这一点上,正确答案属于任何可以解释我的错误并将其变成有用帖子的人。
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

在 RewriteEngine 打开后立即尝试此操作

RewriteRule ^(.*)/$ /$1 [L,R=301]


查看完整回答
反对 回复 2021-08-28
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

尝试这个。将您的 .htaccess 文件放在 time-tracker 文件夹中

  RewriteOptions inherit
    <IfModule mod_rewrite.c>
     RewriteEngine on 
     RewriteBase /time-tracker/public/
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteRule ^(.*)$ index.php?/$1 [L]
    </IfModule>


查看完整回答
反对 回复 2021-08-28
  • 2 回答
  • 0 关注
  • 560 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信