Regex .HTACCESS优先级代码。它忽略了第一条规则之后的所有内容

Regex .HTACCESS优先级代码。它忽略了第一条规则之后的所有内容,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,为什么我不能在我的.HTACCESS中保留所有这些行 RewriteEngine On RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?id=$1 RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?id=$1 // this code below wont work, But if remove the upper code, //It works fine. What could be the reason ? Rewrit

为什么我不能在我的.HTACCESS中保留所有这些行

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?id=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?id=$1

// this code below wont work, But if remove the upper code, 
//It works fine. What could be the reason ?

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/?$ $1.php [L]
在我看来,它不知何故优先考虑了第一行,而忽略了后面的几行。怎么办

在第一个示例中,我正在清理URL
秒-尝试隐藏扩展名。




谢谢

首先评估重写规则。如果模式为真,则将检查条件。如果删除前两个重写规则,则最后一个重写规则的计算结果为true,并检查条件。

我认为您需要使用
上的
重写引擎和
[L,QSA]
执行此操作

QSA将查询字符串追加到末尾。我的意思是“以后不要再处理任何规则”。 第二个
重写引擎打开
将其重新打开

关于这一点,我可能有严重的误解,但……它应该会起作用。 不过,在决定对用户链接进行SEO优化方面做得不错

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?id=$1 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?id=$1 [L,QSA]


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/?$ $1.php [L]

由于您在第一条规则中使用模式
[a-zA-Z0-9_-]+
来匹配几乎所有内容,所以该规则会覆盖第二条规则。在添加
.php
扩展名之前,最好将第二个规则移到第一个规则之前,并检查相应的
.php
文件是否存在

试试这些规则:

RewriteEngine On

# To internally forward /dir/file to /dir/file.php
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f [NC]
RewriteRule . %{REQUEST_URI}.php [L]

# your first rule    
RewriteRule ^([\w-]+)/?$ user.php?id=$1 [L,QSA]
  • %{DOCUMENT\u ROOT}%{REQUEST\u URI}\.php
    表达式用于构建
    .php
    文件的完整路径
  • -f
    用于检查
    .php
    文件是否存在
  • \w
    [a-zA-Z0-9]相同
  • QSA
    (查询字符串附加)标志在添加新查询参数时保留现有查询参数

请你再详细一点好吗?我抓不住,它抓不住。顺便说一句,我不理解这个评论。找不到请求的URL/project/page.php.php在这个服务器上找不到。它成功了!最后谢谢。你介意给我一点解释吗?谢谢,奥斯汀。我尝试了你的代码,但同样的问题仍然存在。我确实得到了一个更干净的URL,但没有后面隐藏URL的问题。