【问题标题】:htaccess mod_rewrite URL within subfolder子文件夹中的 htaccess mod_rewrite URL
【发布时间】:2012-11-30 16:51:21
【问题描述】:

我的问题在 StackOverflow 上似乎没有答案,所以这里是:

我想使用根文件夹中的 htaccess 文件重写以下 URL。

要重写的 URL 是这样的:

http://www.domain.com/subfolder/item/12345

到这里:

http://www.domain.com/subfolder/item.php?id=12345

但是我似乎没有做任何事情。如果 item.php URL 位于根文件夹中,我可以使用以下方法成功重写它:

RewriteRule ^item/(.*)$ item.php?id=$1 [NC,L]

...但如果 item.php 文件位于子文件夹中,则不会!

【问题讨论】:

  • “无法正常工作”是什么意思?日志文件中有什么?如果你尝试会发生什么?
  • 第一个 URL 不“匹配”,因此它不会重写。莫名其妙,这么简单的问题居然没人能解决?

标签: apache .htaccess mod-rewrite


【解决方案1】:

您可以在子文件夹中使用以下 .htaccess:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /subfolder

RewriteRule ^item/(.*)$ item.php?id=$1 [NC,L,QSA]

您重写后的 URL 将变为:http://domain.com/subfolder/item/123

【讨论】:

  • 解决了我的问题,谢谢!!第一行是干什么用的?
  • 那是为了禁用MultiViewsApache's content negotiation module 使用选项MultiViews 运行before mod_rewrite 并使Apache 服务器匹配文件的扩展名。所以/file 可以在 URL 中,但它会服务于/file.php
【解决方案2】:

这里是一个发送这个 URL 的例子(在浏览器地址栏中输入的那个):

http://www.domain.com/subfolder/item/12345(可以是任何数字)这个重写的 URL:

http://www.domain.com/subfolder/item.php?id=12345

RewriteEngine on
RewriteRule ^subfolder/item/([0-9]+)/?$ subfolder/item.php?id=$1 [L] 

只有当存在 subfolder 目录并且在该目录中实际上存在文件 item.php

时,这些指令才会起作用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2015-01-21
    • 1970-01-01
    • 2011-11-16
    • 2011-01-16
    • 2011-08-19
    • 1970-01-01
    相关资源
    最近更新 更多