Regex mod_如何重写发送参数?

Regex mod_如何重写发送参数?,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我使用“page.php”名称创建文件,并在其中编写了以下代码: echo $_GET['product']; 在“.htaccess”中,我编写了以下代码: RewriteEngine On RewriteRule (.*)$ page.php?product=$1 [L] 所有这些文件都在我的本地主机的“apache”文件夹中。 问题在于此urlhttp://localhost/apache/book我不知道为什么,它不是“book”,而是“page.php” 这是因为您的规则循环了两次

我使用“page.php”名称创建文件,并在其中编写了以下代码:

echo $_GET['product'];
在“.htaccess”中,我编写了以下代码:

RewriteEngine On
RewriteRule (.*)$ page.php?product=$1 [L]
所有这些文件都在我的本地主机的“apache”文件夹中。
问题在于此url
http://localhost/apache/book
我不知道为什么,它不是“book”,而是“page.php”

这是因为您的规则循环了两次

  • 第一次使用
    /apache/book
    URI
  • 第二次使用
    /page.php
  • 要避免这种情况,您需要以下条件:

    # skip this rule for valid files
    RewriteCond %{REQUEST_FILENAME} !-f
    # skip this rule for valid directories
    RewriteCond %{REQUEST_FILENAME} !-d
    
    RewriteEngine On
    RewriteBase /apache/
    
    # skip this rule for valid files
    RewriteCond %{REQUEST_FILENAME} !-f
    # skip this rule for valid directories
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ page.php?product=$1 [L,QSA]
    
    因此,结合所有这些,您的
    /apache/.htaccess
    将如下所示:

    # skip this rule for valid files
    RewriteCond %{REQUEST_FILENAME} !-f
    # skip this rule for valid directories
    RewriteCond %{REQUEST_FILENAME} !-d
    
    RewriteEngine On
    RewriteBase /apache/
    
    # skip this rule for valid files
    RewriteCond %{REQUEST_FILENAME} !-f
    # skip this rule for valid directories
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ page.php?product=$1 [L,QSA]