RewriteRule重定向到index.php

时间:2014-08-22 11:09:18

标签: php apache .htaccess zend-framework redirect

这很奇怪。

在我正在使用Zend框架的网站中,需要将任何以“/”结尾的网址(例如http://test.com/test-url/)重定向到不带“/”的相同网址(例如,http://test.com/test-url)。

我将此添加到.htaccess文件中:

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

对于许多网址,这工作正常。但是对于像http://test.com/index/test-url/这样的网址,这会被重定向到http://test.com/index.php/test-url,这是不受欢迎的。有人可以说明为什么会这样吗?

我知道你可以抱怨像“/ index / test”这样不友好的网址,但我现在需要忍受它:)

要求是避免这些被搜索机器人视为重复的网址,这会影响搜索引擎优化,因为有些人认为。

这是完整的.htaccess文件:

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 个答案:

答案 0 :(得分:1)

当您启用MultiViews选项时,似乎会出现此行为。 Multiviews允许与mod_negotiation进行内容协商。您可以通过在.htaccess的最顶部添加以下内容来关闭它:

Options -MultiViews

有关详情,请参阅the documentation以及有关content negotiation的更多信息。

或者,您可以将index.php重命名为prettybutterflies.php并将您的RewriteRule更改为:

RewriteRule ^ prettybutterflies.php [NC,L]