这很奇怪。
在我正在使用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>
答案 0 :(得分:1)
当您启用MultiViews选项时,似乎会出现此行为。 Multiviews允许与mod_negotiation进行内容协商。您可以通过在.htaccess的最顶部添加以下内容来关闭它:
Options -MultiViews
有关详情,请参阅the documentation以及有关content negotiation的更多信息。
或者,您可以将index.php重命名为prettybutterflies.php并将您的RewriteRule更改为:
RewriteRule ^ prettybutterflies.php [NC,L]