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]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?