.htaccess将所有网址重定向到public / index.php,而在本地主机上不加反斜杠

时间:2019-06-20 00:17:48

标签: php .htaccess localhost

背景

我正在使用本地主机(MAMP)上的PHP创建一个时间跟踪应用程序。应用程序结构如下

  • htdocs/time-tracker/public/index.php

问题

无论尝试多少配置,我都无法避免URL出现某种奇怪的毛病。

我需要什么

我想要以下结果。当我在本地计算机上访问URL 127.0.0.1:8888/time-tracker时,我触发了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=truehttp://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。部分工作

只要我在$ _GET中放入内容,此.htaccess文件就可以使我的重定向正常工作

Options +FollowSymLinks

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ public/index.php [L]

例如,127.0.0.1:8888/time-tracker/?test=test127.0.0.1:8888/time-tracker/仍重定向到http://127.0.0.1:8888/Users/etc/etc/htdocs/time-tracker/public时起作用

3。无法在根目录上正确重定向

重定向适用于除根路径以外的所有路径。例如,127.0.0.1:8888/time-tracker/test127.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]

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

2 个答案:

答案 0 :(得分:1)

在RewriteEngine启用后立即尝试

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

答案 1 :(得分:1)

尝试一下。将您的.htaccess文件放在时间跟踪器文件夹中

  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>