Mod Rewrite - 简单问题

时间:2009-05-13 08:59:25

标签: mod-rewrite url-rewriting

这是我目前的.htaccess

Options +FollowSymLinks
DirectoryIndex index.php

RewriteEngine On
RewriteBase /product/

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php$ ./$1/ [R=301,L]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L]

RewriteRule ^contact/?$ ./contact.php [QSA,L]  

现在一切正常......

  • / product / contact返回/ product / contact /
  • /product/contact.php返回/ product / contact /

问题..

  • 如何制作我的所有.php将是/ contact / / help / / faq /
  • 现在我应该将contact.php help.php faq.php添加到htaccess
  • 我尝试添加RewriteRule ^(。*)/ $ $ 1.php [QSA,L],但它将是返回循环。

让我知道如何解决它;)

2 个答案:

答案 0 :(得分:0)

这条线是否可能倒退?

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

据我了解,这会将domain.com/product/help/重写为domain.com/product/help.php。 尝试

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

这应该将domain.com/product/help.php重写为domain.com/product/help/ 和domain.com/foobar/baz.php到domain.com/foobar/baz/ 等

答案 1 :(得分:0)

遗憾的是,在重写语句中执行此操作会产生无限循环,因为Apache会尝试将help/重写为help.php,然后help.php重写为help/等等

如果确实有必要,请在您的应用程序中执行此操作(PHP中的示例):

<?php 
// The (\?.*)? so it "ignores" query strings
if (preg_match('/\.php(\?.*)?$/', $_SERVER['REQUEST_URI'])) {
  header('Location: ' . str_replace('.php', '/', $_SERVER['REQUEST_URI']));
  exit;
}