【发布时间】:2015-10-08 06:28:42
【问题描述】:
我正在使用 PHP 开发一个小的自定义 MVC 项目,并且遇到了一些与 htaccess 相关的问题。最初,我的 htaccess 将所有流量路由到我的根目录中的 index.php,并将剩余路径作为参数传递。这与这段代码完美配合:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?path=$1 [NC,L,QSA]
我现在遇到的问题是我需要将 index.php 文件移动到 /public 目录中。我在网上搜索了答案,发现了一个 kinda 有效的代码 sn-p,只要它只是点击 /,它似乎就可以到达那里,但只要 url 变成 /register/或其他任何东西,它只是 404 的。
# Get rid of /public/ in the URL, and route all requests through
# the Index.php file
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /public/index.php?path=$1 [NC,L,QSA]
RewriteCond %{REQUEST_URI} !/public/ [NC]
RewriteRule ^(.*?)/?$ public/$1 [L]
我知道当使用 ?path 重写 index.php 时,最后一行是没有意义的似乎有效,我已经试错了好几个小时。希望有人可以帮忙!干杯!
【问题讨论】:
-
你试过 RewriteBase 指令吗?它会将您设置的 uri 添加到您的 RewriteBase 规则中。这意味着您可以使用相同的 .htaccess,只需添加上面的 RewriteBase 指令,其值为“/public”
-
嗨,.htaccess 和 php 是分开的 :) php 与此无关 :)
-
根据@MarkSkayff,我尝试过这种方式:pastebin.com/PUmfHgLK(注意最后一行再次注释掉)最后一行注释掉后,我在尝试访问 / 时得到一个目录列表,并且我得到 404 的任何其他网址。
-
根据您的问题@anubhava,您的建议:pastebin.com/Rkbkv0cm 会为 / 生成一个目录列表,对于任何过去的内容都会生成 404。
-
@Epodax 同意它们不一样,也不相互依赖。我添加 PHP 标记主要是因为它是被建议的(我想知道这个词在我的问题中出现了多少次)。您是否认为这与 PHP 无关,因此删除标签会更有帮助?
标签: regex apache .htaccess mod-rewrite url-rewriting