Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess重写规则在值更改时中断_.htaccess - Fatal编程技术网

.htaccess重写规则在值更改时中断

.htaccess重写规则在值更改时中断,.htaccess,.htaccess,我在.htaccess文件中有以下规则,它可以正常工作 RewriteRule ^eat/?([a-zA-Z0-9-]+)?/?([a-zA-Z0-9-]+)?/?([0-9]+)?/?([a-zA-Z0-9-]+)?/?$ /incl/pages/details.php?state=$1&city=$2&ID=$3&name=$4 [NC,L] 我需要修改规则,其中ID($3)将是一个3个字符的字母数字(总是大写)值,而不是现在的3位数字 我试过了,但我的规则不起作用

我在.htaccess文件中有以下规则,它可以正常工作

RewriteRule ^eat/?([a-zA-Z0-9-]+)?/?([a-zA-Z0-9-]+)?/?([0-9]+)?/?([a-zA-Z0-9-]+)?/?$ /incl/pages/details.php?state=$1&city=$2&ID=$3&name=$4 [NC,L]
我需要修改规则,其中ID($3)将是一个3个字符的字母数字(总是大写)值,而不是现在的3位数字

我试过了,但我的规则不起作用:

RewriteRule ^eat/?([a-zA-Z0-9-]+)?/?([a-zA-Z0-9-]+)?/?([A-Z0-9]+)?/?([a-zA-Z0-9-]+)?/?$ /incl/pages/details.php?state=$1&city=$2&ID=$3&name=$4 [NC,L]

我遗漏了什么?

对我来说,这似乎是一个关于参数清晰分离的问题。如果捕获组匹配相同的字符集,则使用问号运算符实现能够重写可变数量参数的“惰性”规则的方法可能会出现问题

相反,我建议您为固定数量的参数指定单独的规则。允许不使用该运算符进行以下扩展:

RewriteEngine on
RewriteRule ^eat/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([A-Z0-9]+)/([a-zA-Z0-9-]+)/?$ /incl/pages/details.php?state=$1&city=$2&ID=$3&name=$4 [NC,L]
RewriteRule ^eat/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([A-Z0-9]+)/?$ /incl/pages/details.php?state=$1&city=$2&ID=$3 [NC,L]
RewriteRule ^eat/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /incl/pages/details.php?state=$1&city=$2 [NC,L]
RewriteRule ^eat/([a-zA-Z0-9-]+)/?$ /incl/pages/details.php?state=$1 [NC,L]
RewriteRule ^eat/?$ /incl/pages/details.php [NC,L]
还有一个问题:你真的需要
NC
标志吗?
eat
真的是写不同的情况吗?因为它会干扰您在仅捕获大写字母或大写和/或小写字母的组之间进行区分的尝试



还有一个一般性提示:您应该始终希望将这些规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些文件是出了名的容易出错,难以调试,而且它们确实降低了服务器的速度。只有在您无法控制主机配置的情况下(读:非常便宜的主机服务提供商),或者如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦),才提供它们作为最后一个选项.

最有可能的问题是所有的
/?
,这些问题会导致模式匹配主题的长或短部分,超出您的预期。看起来您试图变得懒惰,只使用一条规则来匹配数量可变的参数。那可不是什么好事。@arkascha你什么意思?我要删除“”吗