我在获取 .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 目录中?您要消除什么?
提供了很多关于如何管理 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