.htaccess 和 php 配置

.htaccess 和 php 配置

我在获取 .htaccess 文件的正确配置时遇到了一些麻烦。

我使用 mvc 模式创建了一个小型网站,所有网址看起来都像 site.com/appname/public/index.php?param=page。我试图将所有网址写为 site.com/page。我搜索了 Apache 文档,但我仍然感到困惑...

这是我现在在 /public 目录中的内容:

Options -MultiViews
RewriteEngine on
RewriteBase /appname/public/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

这就是我在根目录中所拥有的内容:

  RewriteEngine On
  RewriteRule ^(.*)$ appname/public [R=301,L]

这工作正常,它重定向到 index.php(在 /public 目录中)并将所有 url 重写为 site.com/appname/public/page。

现在我想获取更多,我也会隐藏 /appname/public,但我不知道该怎么做。我应该组合更多 RewriteRule 来匹配“/appname/public”吗?

有什么建议么?

多谢!

编辑:有关我想要实现的目标的更多信息。

我有一个像这样的目录树:

htdocs
|---appname
    |
    |---app
    |   |---other_dirs
    |   |---other_files
    |  
    |---public
        |---some_dirs/file
        |--- index.php

为了访问我的页面,我需要将浏览器指向 index.php 并传递一些 GET 值。因此,所有 URL 应如下所示:

site.com/appname/public/index.php?val=page

这是我现在所拥有的(遵循上述规则)

site.come/appname/public/page

这就是我想要得到的……

site.com/page

我不明白如何重写/隐藏中间部分,保留最后一个结构“?url = $ 1”(“url”将在控制器中处理,解析等)。

我希望它更清楚一些。

谢谢! :)

答案1

我不明白这个问题。请解释一下。

RewriteBase 目录是否位于 documentroot 目录中?您要消除什么?

Apache 手册 Mod_Rewrite

提供了很多关于如何管理 mod_rewrite 的示例和细节

请先查看那里,然后请提供有关您的设置的更多细节。

这是从该页面中提取的,详细说明了您使用 rewritebase 的原因。您希望截断的文件夹是否全部位于 htdocs 文件夹中,或者它们是否位于公共 docroot 或 htdocs 或 www 或您为文档根目录命名的任何名称之外?

RewriteBase 指令

描述:设置每个目录重写的基本 URL
语法:RewriteBase URL-path
默认值:无
上下文:目录,.htaccess
覆盖:FileInfo
状态:扩展
模块:mod_rewrite
RewriteBase 指令指定用于替换相对路径的每个目录(htaccess)RewriteRule 指令的 URL 前缀。

在每个目录(htaccess)上下文中的替换中使用相对路径时,此指令是必需的,除非以下任一条件为真:

原始请求和替换位于 DocumentRoot 之下(而不是通过其他方式访问,例如 Alias)。
包含 RewriteRule 的目录的文件系统路径(以相对替换为后缀)也可作为服务器上的 URL 路径有效(这种情况很少见)。
在下面的例子中,RewriteBase 是必要的,以避免重写为 http://example.com/opt/myapp-1.2.3/welcome.html,因为资源与文档根目录无关。这种错误配置通常会导致服务器在文档根目录下查找“opt”目录。

文件根目录 /var/www/example.com
别名 /myapp /opt/myapp-1.2.3

重写引擎开启
RewriteBase /myapp/
重写规则^index\.html$ welcome.html


相关内容