1

我有一些使用索引控制器的重定向和 url

像这样的绝对或相对:www.domain/index/contact 或只是 /index/contact

我可以用 htaccess 去掉索引部分,这样我就可以看到 www.domain/contact

我只想要这个用于索引控制器

编辑

这些是我已经拥有的规则

Options +FollowSymlinks
RewriteEngine On
Options All -Indexes
IndexIgnore *
DirectoryIndex index.php 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(.*)$ index.php/?$1 [L,QSA]

在此先感谢,丰富

4

1 回答 1

1

您将需要查看mod_rewrite。它具有许多强大的选项,可根据您设置的规则在您的应用程序中重写 URL。

对于您的具体情况,您可能有.htaccess如下规则:

RewriteRule /contact(.*)$ /index/contact$1 [L,QSA]

上面的规则将重写所有对路径的请求,/contact就好像调用者已经访问过一样/index/controller。此外,任何额外的路径信息都将被捕获并替换$1为替换。该QSA标志告诉重写引擎也完整地传递查询字符串。

如果你想路由所有请求,比如说除了以 开头的路径/static,你可能更喜欢如下规则:

RewriteCond %{REQUEST_FILENAME} !^/static
RewriteRule ^(.*)$ index/$1 [L,QSA]

这将忽略所有以 URL 开头的 URL,/static并通过您的控制器传递其他所有内容。

更新

您不需要这些RewriteCond行...除非您特别想跳过真实文件和目录的规则处理。看起来您的重写路径可能存在语法问题。从一个非常基本的重写设置开始,并根据需要从那里扩展:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !/index\.php
RewriteRule ^(.*)$ index.php/$1 [L,QSA]  # use ? or / but not both

这将允许您/contact在浏览器中访问,而服务器就像您访问过一样/index.php/contact。它还将忽略直接对index.php文件的任何请求,以防它们最终出现在您的代码中。

于 2012-11-20T16:29:16.117 回答