禁用www.mywebsite.com/index.php/route访问权限

时间:2011-05-21 03:54:21

标签: zend-framework zend-route

我的网站可以从2种不同的uri查看:

www.mywebsite.com/magazine或www.mywebsite.com/index.php/magazine

这是我的网站的副本,这对谷歌来说非常糟糕。有人知道如何禁用index.php浏览?

这是我的htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

1 个答案:

答案 0 :(得分:1)

使用mod_rewrite撰写RewriteRule来执行从/index.php/magazine到/ magazine的永久重定向。

编辑5/21/11美国东部时间上午9:40 经过一些“快速”测试后,我意识到如果您尝试将其应用于文档根目录中的子文件夹,则以下规则将不起作用(例如:www.mysite.com/test/index.php/go/somewhere )。这是因为mod_rewrite的工作方式,Apache mod_rewrite Documentation上有记录,并说:

  

注意:每个目录上下文中的模式匹配

     

永远不要忘记应用了Pattern   到每个服务器的完整URL   配置文件。 然而,在   每个目录配置文件,   每个目录前缀(始终是   对于特定目录而言是相同的)   自动删除模式   匹配并自动添加之后   替换已经完成。这个   功能对于许多种类都是必不可少的   重写 - 没有这个,你会的   总是必须匹配父母   目录并非总是如此   可能。有一个例外:如果是   替换字符串以。开头   'http://',然后是目录前缀   不会被添加,也不会被添加   重定向或代理吞吐量(如果标志   强迫使用 P

因此,如果您的.htaccess文件位于子目录中,则RewriteRule会变为:

RewriteEngine On
RewriteRule ^index\.php(/.*)$ /sub-dir-name$1 [R=301,QSA,L]

否则,如果您从域的根目录重写,则为:

RewriteEngine On
RewriteRule ^index.php(/.*)$ /$1 [R=301,QSA,L]

希望对你有用!