【问题标题】:htaccess error 500 if empty variable (php)如果为空变量(php),htaccess 错误 500
【发布时间】:2015-09-03 18:08:46
【问题描述】:

/product/blabla 没问题 /product/ 给出“500 内部错误”

RewriteRule product/([0-9a-zA-Z]+) product.php?c=$1 [L]

if ($_GET['c']){
 ....
}
else{
  ?>
  <script>document.location.href="<?=$racine;?>"</script>
  <?
}

【问题讨论】:

  • 好吧,/product/ 不匹配 product/([0-9a-zA-Z]+),所以谁知道那里正在执行什么代码!?
  • 可能是在product/目录下执行index.php?

标签: php .htaccess


【解决方案1】:

试试这个

RewriteRule product/([0-9a-zA-Z]+) product.php?c=$1 [L]
RewriteRule product/ product.php [L]

if (isset($_GET['c'])){
 ....
}
else{
  ?>
  <script>document.location.href="<?=$racine;?>"</script>
  <?
}

【讨论】:

    【解决方案2】:

    我想这可能对你有帮助。

    将您的.htaccess 重写为

    RewriteRule product/^$|([0-9a-zA-Z]+) product.php?c=$1 [L]
    

    ^$|([0-9a-zA-Z]+) 将检查空字符串或字符串。所以product/ 也可以工作

    【讨论】:

    • ^ 是字符串的开头。我不认为 字符串的开头 会出现在字符串的中间。 product/^$ 从不匹配任何东西,只有 [0-9a-zA-Z]+ 将始终匹配 anything
    • @deceze, ^$ 代表一个空字符串。所以我认为product/product/blahblah 将重定向到相同的路径。问题是 /product/ give 500 internal server error。通过更改正则表达式,所有组合都将导致 product.php
    • 是的,正则表达式^$ 匹配一个空字符串。但前提是那是 整个 表达式!该表达式表示“字符串的开头紧跟字符串的结尾”。如果该表达式中还有其他内容,它将不再匹配。
    • 是的,因为 第一部分从不匹配任何内容,而第二部分始终匹配所有内容! 请参见此处:rubular.com/r/83FZ0HS1zb不应该匹配,但确实如此!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2017-06-28
    相关资源
    最近更新 更多