Apache htaccess-将一条规则重写为另一条规则(虚拟文件夹)

Apache htaccess-将一条规则重写为另一条规则(虚拟文件夹),apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,我在根目录中有一个名为propertyid.php的文件 我有一个正常工作的RerwiteRule: RewriteRule for sale/(*)propertyid.php?pid=$1 用户输入此URL,地址栏中将显示相同的URL domain.com/for sale/(pid) 我想要第二条规则,允许用户输入此url domain.com/sell/(pid) 但是我想在地址栏中显示第一个URL domain.com/for sale/(pid) 我尝试了以下的多种变体 Rewrit

我在根目录中有一个名为
propertyid.php的文件

我有一个正常工作的
RerwiteRule
RewriteRule for sale/(*)propertyid.php?pid=$1

用户输入此URL,地址栏中将显示相同的URL
domain.com/for sale/(pid)

我想要第二条规则,允许用户输入此url
domain.com/sell/(pid)

但是我想在地址栏中显示第一个URL
domain.com/for sale/(pid)

我尝试了以下的多种变体

RewriteRule ^sell$ /for-sale/propertyid.php?pid=$1
RewriteRule sell/(.*) for-sale?pid=$1

您需要将
/sell/(.*)
重定向到
/for sale/(.*)
。将
/for sale/(.*)
重定向到
propertyid.php?pid=$1
的重定向规则将处理其余部分。 只需检查几件事:

  • /sell/(.*)
    /for sale/(.*)
    规则应该在上面
    /for sale/(.*)
    propertyid.php?pid=$1
    重定向规则,应该 返回永久移动的301 http代码

  • 检查多个重定向

  • 您的.htaccess应该如下所示:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^sell(.*)$  http://%{HTTP_HOST}/for-sale$1 [L,R=301]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^for-sale/(.*)$  propertyid.php?pid=$1 [L]
    

    谢谢你的及时和完美的回复。我试着投赞成票,但我的分数不到15分(原来我之前的问题措辞很糟糕)。也许其他人可以投票支持这个答案。@thickguru-显然,我在前面的问题中的措辞做得不好。谢谢你编辑我的问题。我注意到您删除了我之前关于搜索答案的评论,并且似乎突出显示了代码元素。今后我将努力跟随你的脚步。如果您在以后的问题中还有什么可以指出的,我欢迎您的反馈。