【问题标题】:Htaccess Public Folder Rewrite RuleHtaccess 公用文件夹重写规则
【发布时间】: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


【解决方案1】:

在您的 .htaccess 中仅保留此内容:

DirectoryIndex index.php
RewriteEngine On

RewriteRule ^/?$ public/ [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ public/?path=$1 [L,QSA]

【讨论】:

  • 谢谢,我也有同样的问题,用你的代码块,我的项目工作! c:
猜你喜欢
  • 1970-01-01
  • 2017-07-16
  • 2012-11-22
  • 1970-01-01
  • 2012-08-20
  • 2014-12-20
  • 2012-02-24
  • 2016-03-30
  • 1970-01-01
相关资源
最近更新 更多