【问题标题】:Mod Rewrite - Simple QuestionMod重写 - 简单的问题
【发布时间】:2010-05-10 04:03:11
【问题描述】:

这是我当前的 .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] 但它会返回循环。

让我知道如何解决它;)

【问题讨论】:

  • 也许只是因为您已经在尝试解决问题,但是您的 .htaccess 的底线已经将 /product/help/ 重定向到 /product/help.php,这是故意的吗?

标签: mod-rewrite url-rewriting


【解决方案1】:

遗憾的是,在您的重写语句中这样做会造成无限循环,因为 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;
}

【讨论】:

  • 转义正则表达式中的点。否则,如果 URI 路径以 php 结尾,例如 foo-phpbar/php,则会出现无限循环。
  • 很好的抓住秋葵,修复了答案。谢谢!
【解决方案2】:

这条线有可能是倒过来的吗?

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/ 等等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多