Php 重写加载的文件上的获取规则错误

Php 重写加载的文件上的获取规则错误,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,我有以下.htaccess: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ users.php?q=$1 [QSA,L] 但是,如果我进入网站的任何页面,脚本将显示错误: 未捕获的语法错误:意外标记使用此规则: RewriteEngine On RewriteCond %{THE_REQUEST} /users\.php\

我有以下
.htaccess

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ users.php?q=$1 [QSA,L]
但是,如果我进入网站的任何页面,脚本将显示错误:

未捕获的语法错误:意外标记使用此规则:

RewriteEngine On
RewriteCond %{THE_REQUEST} /users\.php\?q=([^&\s]+) [NC] 
RewriteRule ^ %1? [NC,R,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([^/]+)/?$ users.php?q=$1 [NC,QSA,L]

在Apache2.4上测试,它很短,很甜

RewriteEngine On
RewriteRule    ^([.*]+)/$    users.php?q=$1    [QSA,L]

希望这有帮助。

您的第二个和第三个示例URL看起来完全相同。是@Nathantugy,我想在访问
https://somesite.com/users.php?q=Alex
将URL替换为
https://somesite.com/Alex/
。我认为您需要给出一个更清晰的示例,说明HTML页面是如何被破坏的。这听起来不像mod_rewrite会做的事情。@Igor抱歉,%{THE_REQUEST}变量名中有一个输入错误,我已经更正了。请尝试更新的答案。谢谢,脚本的错误现在已经解决了!但是,当我进入
https://somesite.com/users.php?q=Alex
hte URL不会被
https://somesite.com/Alex/
:(还有,您能解释一下如何用脚本修复错误吗?谢谢!通常明智的做法是包含
RewriteCond
指令,以检查请求不是真实的文件或目录,否则用户无法请求真实的目录,例如,一个名为
mysite.com/articles将变得不可访问。@Bobulous-那么,你的意思是…如果我不在我的htaccess文件中放置
RewriteCond%{REQUEST\u FILENAME}!-d
RewriteCond%{REQUEST\u FILENAME}!-f
的话,人们就不能直接访问我网站上的目录,或者mysite.com/test/的链接将无法运行?目录“test”无法访问?是的,没错。
RewriteRule
将看到“test”,并将请求默默地重写为“users.php?q=test”,因为没有
RewriteCond
来检查“test”不是真正的目录。请记住,即使
RewriteCond
已就位,用户也可能会选择名称“test”然后他们将无法使用整洁的URL访问他们的个人资料,因为这样他们将被带到实际的目录“test”。因此,您会注意到,这些“SEO友好”重写通常使用路径“/users/test”来明确这是用户名而不是目录。