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”来明确这是用户名而不是目录。