【问题标题】:Rewrite Rules not working when moved code to a subdirectory将代码移动到子目录时重写规则不起作用
【发布时间】:2013-06-21 00:40:58
【问题描述】:

我一直在使用以下规则在同一服务器上的开发域上的 URL 中传递查询字符串,并且它正在工作。

DOMAIN1 上的工作代码 网址:http://DOMAIN1.com/billing/renew.php?invoice_no=XXX

RewriteEngine On

RewriteRule ^billing/renew/invoice/([^/]*)$ /billing/renew.php?invoice_no=$1 [L]

但是,当我将其部署到子目录“beta”中的实时域时,它无法正常工作。 两个域都在同一台服务器上,并且主机配置相同。 允许覆盖以确保 htaccess 正常工作。唯一的区别是实时域在 https 协议上工作,并且在主机配置中定义了一个重写规则,以将所有非 https 流量重定向到 https。

我已将 httacess 文件放在实时服务器的 beta 目录中。

DOMAIN2 上的非工作代码 网址:“https://DOMAIN2.com/beta/billing/renew.php?invoice_no=XXX

RewriteEngine On
RewriteBase /beta/

RewriteRule ^billing/renew/invoice/([^/]*)$ /billing/renew.php?invoice_no=$1 [L]

也试过了

RewriteEngine On

RewriteRule ^beta/billing/renew/invoice/([^/]*)$ /beta/billing/renew.php?invoice_no=$1 [L]

谁能告诉我我做错了什么?

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting rewrite


    【解决方案1】:

    您需要将规则的目标设为相对 URI,以便将基础应用到它。要么,要么将基础添加到绝对 URI:

    RewriteEngine On
    RewriteBase /beta/
    
    RewriteRule ^billing/renew/invoice/([^/]*)$ billing/renew.php?invoice_no=$1 [L]
    # No "/" here ------------------------------^
    

    或者

    RewriteEngine On
    
    RewriteRule ^billing/renew/invoice/([^/]*)$ /beta/billing/renew.php?invoice_no=$1 [L]
    # Add the "/beta" here ---------------------^
    

    【讨论】:

    • 很抱歉让您感到痛苦,真正的问题是文件名是 renew.php 并且服务器以某种方式将其用作简单的获取请求。如果我将文件名更改为 Renew.php 它可以正常工作,不知道为什么会这样,但是我的规则现在可以正常工作,所以感谢您的帮助。
    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多