dshu1235 2014-08-22 11:09
浏览 160
已采纳

RewriteRule重定向到index.php

This is something weird.

In a website that I'm working on, which uses Zend framework, there was a requirement to redirect any URLs ending with "/" (e.g., http://test.com/test-url/) to the same URL without the "/" (e.g., http://test.com/test-url).

I added this to the .htaccess file:

RewriteRule ^(.+[^/])/$     /$1 [R=301,L]

For many URLs this is working fine. But for URLs like http://test.com/index/test-url/ this gets redirected to http://test.com/index.php/test-url, which is undesired. Can somebody throw some light on why this happens please?

I know you can complain about the unfriendly URLs like "/index/test", but I need to live with it for now :)

The requirement was to avoid these being seen as duplicate URLs by search bots, which affects SEO as some believe.

Here is the complete .htaccess file:

RewriteEngine On

RewriteBase /

RewriteRule ^(.+[^/])/$     /$1 [R=301,L]

# Some other strange redirections
RewriteRule ^index/$ / [R=301]
RewriteRule ^css/$ / [R=301]
RewriteRule ^js/$ / [R=301]

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

# compression
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE image/svg+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/atom_xml
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE application/x-httpd-php
    AddOutputFilterByType DEFLATE application/x-httpd-fastphp
    AddOutputFilterByType DEFLATE application/x-httpd-eruby
</IfModule>
  • 写回答

1条回答 默认 最新

  • douxie0824 2014-08-22 12:49
    关注

    This behaviour seems to surface when you have the MultiViews option turned on. Multiviews allows for content negotiation with mod_negotiation. You can turn it off by adding the following in the very top of your .htaccess:

    Options -MultiViews
    

    For more information, see the documentation and some more information about content negotiation.

    Alternatively you can rename index.php to prettybutterflies.php and change your RewriteRule to:

    RewriteRule ^ prettybutterflies.php [NC,L]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R