htaccess,不要在url中显示索引控制器

时间:2012-11-20 12:03:38

标签: apache .htaccess url-rewriting

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

绝对或相对的:www.domain / index / contact或just / 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]

提前感谢,Rich

1 个答案:

答案 0 :(得分:1)

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

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

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

上述规则会重写对/contact路径的所有请求,就好像呼叫者已经访问/index/controller一样。此外,将在$1中捕获并替换任何其他路径信息以进行替换。 QSA标志告诉重写引擎也完整地传递查询strign。

如果您要路由所有请求,请说明以/static开头的路径除外,您可能更喜欢以下规则:

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

这将忽略以/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个文件的任何请求。