我正在使用本地主机(MAMP)上的PHP创建一个时间跟踪应用程序。应用程序结构如下
htdocs/time-tracker/public/index.php
无论尝试多少配置,我都无法避免URL出现某种奇怪的毛病。
我想要以下结果。当我在本地计算机上访问URL 127.0.0.1:8888/time-tracker
时,我触发了php应用程序,并通过htdocs/time-tracker/public/index.php
路由了所有请求。最好不要在结尾加上斜线,但是优先级只是使应用程序正常工作。
RewriteEngine On
RewriteBase /time-tracker/
RewriteRule ^public\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /public [L]
由于某些原因,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
这些结果都不是我想要的。
只要我在$ _GET中放入内容,此.htaccess
文件就可以使我的重定向正常工作
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
时起作用
重定向适用于除根路径以外的所有路径。例如,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]
我已将问题追溯到最后一个问题:空路径不会向重定向注册。
# Settings
Options +FollowSymLinks
DirectorySlash Off
RewriteEngine On
# Rules
RewriteBase /time-tracker/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*|x) index.php?/var=$1 [L]
由于某种原因,如果路径为空,它将无法捕获重定向。
这是我得到的最好的。这实际上是可行的,但我无法解决斜杠问题。
# Settings
DirectorySlash On
RewriteEngine On
# Rewrite
RewriteBase /time-tracker/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php?/var=$1 [L]
希望有人可以解决斜杠目录根目录的结尾问题,或者至少确认这是不可能的。在这一点上,任何可以解释我的错误并将其写成有用的文章的人,都是正确的答案。
答案 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>