2010-11-19 151 views
0

我正在名为testsite的目录中工作,我希望所有.php扩展名都被尾部斜线替代。我在那里,在那里(例如)输入http://mydomain.com/testsite/about意味着http://mydomain.com/testsite/about.php被加载。使用Apache向URL添加尾部斜杠

但是,我现在要将网址显示为./about/,以便在搜索引擎排名中只显示一个版本。

这里是我的.htaccess:

RewriteEngine On 
RewriteBase /testsite/ 
RewriteRule ^()$ index.php [NC,L] 
RewriteCond %{REQUEST_URI} !(^/?.*\..*$) [NC] 
RewriteRule (.*)$ $1.php [NC] 

而且,是有可能保存(和显示隐藏我传递任何参数)?

所有帮助非常感谢!

回答

1

尝试下列规则:

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301] 
RewriteRule ^$ index.php [L] 
RewriteRule (.*)/$ $1.php [NC] 
+0

嗨Gumbo。谢谢你。我试过这个,但是它似乎在./about(给./about%25)之类的url结尾添加了%25,并且它在./about%25%25%25的循环中丢失了。 。当我把./about/放在地址栏中。我认为它几乎在那里,但不完全。 – user114671 2010-11-19 16:35:58

+0

@Outerbridge Mike:抱歉,错误的字符。 – Gumbo 2010-11-19 16:55:04

+0

嗨Gumbo。感谢您的帮助。它越来越近了。如果我去./关于它正确地把./about/ in作为url,但是页面显示没有加载CSS?!?如果我然后点击一个链接,说./contact-us/它坚持与./about/contact-us.php.php.php.php.php.php!它几乎是正确的,所以今天晚些时候我会有更多时间看看。再次感谢。 – user114671 2010-11-20 08:49:56

0

尝试将最后规则:

RewriteRule (.*)$ $1.php [NC] [E=ORIGINAL_URL:$1] 
+0

大卫你好。不幸的是我仍然得到和以前一样的结果。 E =部分是做什么的?感谢Mike – user114671 2010-11-19 16:27:26

+0

E或env是一个环境变量,请查阅http://httpd.apache.org/docs/2.2/env.html获取更多详细信息。在上面的例子中,即使进行了重写,原始URL也会被保留。 – 2010-11-21 14:36:04