Mod Rewrite后错误的GET变量

时间:2015-04-26 13:04:30

标签: apache .htaccess mod-rewrite rewrite

我有Mod Rewrite的问题。

RewriteRule ^([^-]*)/$ $1.php
RewriteRule ^page/([^-]*)/$ /showpage.php?id=$1 [L]

所以当我输入example.com/page/时,它会转到page.php,这没关系 但是当我想要去page/1/ (example.com/showpage.php?id=1)并试着去 $_GET['id']变量它让我回到了这个

1.php/1

1 个答案:

答案 0 :(得分:1)

发生了什么:

  1. /page/1/(第一条规则匹配)重写为/page/1.php
  2. /page/1.php(第二条规则匹配)重写为/showpage.php?id=1.php
  3. 要避免它:

    • 您必须在第一条规则之后添加[L]标记。

    • 您可以使用更好的模式。例如[^/]+ 意味着at least one character which is not a slash(将阻止 在你的情况下规则冲突)。

    • 您可以检查文件是否存在(非强制性,但更好)。

    这应该按预期工作

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
    RewriteRule ^([^/]+)/$ /$1.php [L]
    
    RewriteRule ^page/([^/]+)/$ /index.php?id=$1 [L]