Regex 简单正则表达式在htaccess中不起作用

Regex 简单正则表达式在htaccess中不起作用,regex,.htaccess,url-rewriting,Regex,.htaccess,Url Rewriting,看起来是个简单的问题。但我就是不明白: 这条htaccess规则确实有效: RewriteEngine On RewriteRule ^m(.+)$ ?s=$1 但这并不是: RewriteEngine On RewriteRule ^(.+)$ ?s=$1 它返回一个内部服务器错误。那个正则表达式怎么了?为了工作,应该修改什么?我不知道“不工作”的确切含义,但我认为它可能会陷入重写循环 试试这个: RewriteEngine On RewriteCond %{REQUEST_URI} !^

看起来是个简单的问题。但我就是不明白:

这条htaccess规则确实有效:

RewriteEngine On
RewriteRule ^m(.+)$ ?s=$1
但这并不是:

RewriteEngine On
RewriteRule ^(.+)$ ?s=$1
它返回一个内部服务器错误。那个正则表达式怎么了?为了工作,应该修改什么?

我不知道“不工作”的确切含义,但我认为它可能会陷入重写循环

试试这个:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^?s=
RewriteRule ^(.+)$ ?s=$1

我还没有对此进行测试,但它应该做的只是在尚未添加?s参数的情况下进行重写。

哦,我刚刚意识到,您还可以在“重写”状态下查找实际的查询字符串。你可以试试:

RewriteEngine On
RewriteCond %{QUERY_STRING} !s=
RewriteRule ^(.+)$ ?s=$1

它不起作用。我解决了它,或者更准确地说,使用
RewriteRule^([a-z]+)$?s=$1解决了它(因此点从正则表达式中消失)。但是问题仍然存在:为什么
^(+)$
不起作用?可能是同样的原因,点也包括?=部分,所以它试图继续重写它(使它成为?s=?s=,?s=?s=?s=,等等)。通过将其限制为以字母开头的URI,它排除了?,基本上做了我试图做的相同的事情。我也认为我知道我做错了什么,我应该逃过?(在正则表达式中有一个特殊函数)。但是
^([^?]+)$?s=$1
也不起作用。我应该工作,不是吗?我试图否定字符
。我怎么解决呢?嗯,对不起。我现在不能测试任何东西,所以我不知道如何修复它。