我有一些使用索引控制器的重定向和网址
绝对或相对的: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
答案 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
个文件的任何请求。