【问题标题】:Conflict with mod_rewrite rule?与 mod_rewrite 规则冲突?
【发布时间】:2011-12-01 22:50:55
【问题描述】:

如何重写 www.mysite.com/login 到 www.mysite.com/login.php 以及“搜索”和“注册”等其他几个网站页面?

我试着用

做到这一点
RewriteRule ^(.+). $1.php [R,NC]

但是得到了一个非常讨厌的重定向循环。 :/

我也想重写 www.mysite.com/Elvis 到 www.mysite.com/profile?username=Elvis 我确定这与第一条规则相冲突。

这可能吗?

【问题讨论】:

  • 您想将所有内容重定向到各自的文件 .php?
  • URI /profile.php(例如)与您的正则表达式匹配。您需要更改正则表达式或添加其他重写规则,以停止处理您不想重定向的页面。
  • @BookOfZeus 是,除了应该重定向到 profile 的用户名应该重定向到 profile.php。
  • 请阅读 Gian 的评论,或者你可以有类似的东西:/profile/Elvis?

标签: .htaccess mod-rewrite apache2


【解决方案1】:

下面是应该起作用的东西:

# if the URL doesn't end with "php":
RewriteCond %{REQUEST_URI} !(.+)\.php$
# then whatever it is, add php at the end:
RewriteRule (.+) $1.php [NC]

你的错误是:

  • directive R = force redirect = 它将客户端浏览器重定向到新的,客户端会看到这个(URL,我想这不是你想要做的)
  • ^. 没有用,并且(可能)会产生错误。

如果这不起作用,它可能非常接近你想要的。

两个提示:


请尝试使用RewriteLog 指令:它可以帮助您追踪此类问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢的检查正则表达式的工具:

http://www.quanetic.com/Regex(别忘了选择 ereg(POSIX) 而不是 preg(PCRE)!)

【讨论】:

  • 正在尝试错误记录。为什么我在 Apache 日志中不断收到服务器错误 500 和 RewriteLog not allowed here
  • 在您的 global 配置中为此目录添加“AllowOverride All”。重新启动您的服务器。这应该有效。但是不要忘记在 prod 环境中删除该指令一次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多