【问题标题】:Apache Rewrite rule with multiple files from same virtual directory?来自同一虚拟目录的多个文件的 Apache 重写规则?
【发布时间】:2012-09-15 11:03:51
【问题描述】:

这个问题有两个部分:

  1. 我使用 htaccess rewrite 将“file.php”更改为“file”,所以 http://www.example.com/file 的工作方式与 http://www.example.com/file.php 一样

这是我的 .htaccess 的一部分:

    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule (.+) /$1.php [L]
  1. 第二部分是目录问题:

这是我处理该问题的 .htaccess 的一部分:

    RewriteRule ^register website/register

    RewriteRule ^register/rules website/rules

我想要完成的是:

http://www.example.com/register 使用重写规则显示网站/注册 http://www.example.com/register/rules 使用重写规则显示网站/规则

问题是 URL 框显示 example.com/register/rules 但页面继续显示 example.com/register 的内容。

这里出了什么问题?是“.php”扩展名是导致这一切的第一部分吗?还是我的 htaccess 完全错误?

【问题讨论】:

  • 发布将“file”重写为“file.php”的规则
  • /website/register 是真实文件还是/website/register.php
  • website 是文件 'register(.php)' 所在的文件夹。它由 example.com/register 引用。与规则相同。 website 是其中包含文件“规则”的文件夹,它应该被引用 example.com/register/rules。基本上,当我想转到“规则”文件时,“注册”文件应该充当目录。
  • 那么发生了什么?没有? 404错误? 500 错误?
  • 什么都没有发生。 URL 框显示example.com/register/rules,但页面继续显示example.com/register 的内容。

标签: apache .htaccess


【解决方案1】:

什么都没有发生。 URL 框显示 example.com/register/rules 但页面继续显示 example.com/register 的内容

这是因为你没有限制规则,你有这个:

RewriteRule ^register website/register

RewriteRule ^register/rules website/rules

第二条规则永远不会被应用,因为 URI /register/rules 匹配第一条规则的正则表达式(^register,意思是“URI register 开始”)。添加结束边界:

RewriteRule ^register/?$ website/register [L]

RewriteRule ^register/rules/?$ website/rules [L]

或交换它们:

RewriteRule ^register/rules website/rules [L]

RewriteRule ^register website/register [L]

虽然您将需要 [L] 标志。

【讨论】:

    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 2012-05-26
    • 2022-01-07
    • 1970-01-01
    • 2013-12-27
    • 2014-04-25
    • 1970-01-01
    相关资源
    最近更新 更多