无扩展URL尾随斜杠重定向

时间:2011-06-12 23:06:47

标签: .htaccess mod-rewrite url-rewriting

我已经在Dreamhost上托管的几个域上测试了下面的代码并且它有效 - 除了去年我添加的新域名。

RewriteEngine on

#unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]

#redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.*)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.*)\.php$ $1 [R=301,L]

#resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

有效的例子:

ryanvanetten.com/resources/lame/ryanvanetten.com/resources/lame.php都重定向到ryanvanetten.com/resources/lame  并且提供的实际文件是lame.php

破碎的例子:

airve.com/test/file正确地提供了file.php,但重定向airve.com/test/file/airve.com/test/file.php不起作用。尝试它们,你会发现它们似乎吐出了内部的绝对路径。当我独立尝试每个重定向时以及当我尝试下面的基本重定向时,会发生同样的事情。

Redirect 301 /test/file/ /test/file

.htaccess中没有别的东西。对这个问题有什么看法?

1 个答案:

答案 0 :(得分:1)

在这两种情况下,您都重定向到$1,并且没有RewriteBase指令来告诉Apache在哪里根这样的相对路径。

尝试在$ 1之前添加根斜杠,将其锚定到您的网络服务器的根目录,例如:

RewriteRule ^(.*)$ /$1.php [L]