【发布时间】:2021-01-05 06:31:15
【问题描述】:
我在 htaccess 文件中的重写规则有问题。这是我的代码:
#BLOCK 1#
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([^/]+)/$ path_to_website/file.php?product=$1&country=0&pag=pag-1&rew=1 [L]
RewriteCond %{QUERY_STRING} ^(.*)=(.*)&country=0&pag=pag-1$
RewriteCond %{QUERY_STRING} !^.*rew=1.*$
RewriteRule ^.*$ /path_to_website/%2/? [R=301,L]
#BLOCK 2#
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([^/]+)/([^/]+)/$ path_to_website/file.php?product=$1&country=$2&pag=pag-1&rew=1 [L]
RewriteCond %{QUERY_STRING} ^(.*)=(.*)&(.*)=(.*)&pag=pag-1$
RewriteCond %{QUERY_STRING} !^.*rew=1.*$
RewriteRule ^.*$ /path_to_website/%2/%4/? [R=301,L]
#BLOCK 3#
RewriteRule ^([\w-]+)/?$ path_to_website/file.php?product=$1&country=0&pag=pag-1 [L]
RewriteRule ^([\w-]+)/([\w-]+)(?!=/)$ path_to_website/file.php?product=$1&country=0&pag=$2 [L]
RewriteRule ^([\w-]+)/([\w-]+)/$ path_to_website/file.php?product=$1&country=$2&pag=pag-1 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)$ path_to_website/file.php?product=$1&country=$2&pag=$3 [L]
前两块来自提交表单,第三块来自href。
我想在不与其他规则冲突的情况下添加以下规则:
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)$ path_to_website/file2.php?product=$1&country=$2&product-details=$3 [L]
编辑
解决了这个问题,我只是在rewrite for details-page中添加了另一个参数:
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+).([\w-]+)$ path_to_website/file2.php?product=$1&country=$2&product-details=$3&place-holder=$4 [L]
【问题讨论】:
-
感谢您在问题中分享您的 htaccess 文件,请继续关注。您能否提及是否有任何条件可以让我们理解/隔离哪个 URI 应该重定向到前一个或哪个 URI 应该重定向到您新提到的 url?请详细解释一下。
-
好的。这就是问题所在。如果我点击这个 href: path_to_website/file2.php?product=$1&country=$2&product-details=$3 我将重定向到 path_to_website/file.php?product=$1$country=$2&pag=$3
-
我相信您的新规则的条件部分已经存在于您的 htaccess 文件的规则之一
^([\w-]+)/([\w-]+)/([\w-]+)$中,因此是问题所在。所以我们需要在规则中提到一个条件来区分两者。否则,即将到来的请求将如何知道它应该去哪个规则进行重写或重定向。 -
所以我需要写一些 RewriteCond 吗?对不起,我是 htaccess 的新手,我很难理解它。
-
@Acr0no,对不起,但不清楚。它很简单,只需让我们知道您要在现有规则中重定向到哪个 url 以及从哪个 url 到您要为您重定向新规则的哪个 url,您提供的 href 是一个问题而不是信息,它不是清楚,让我们知道更多细节,谢谢。
标签: apache .htaccess mod-rewrite url-rewriting friendly-url