Regex .HTACCESS优先级代码。它忽略了第一条规则之后的所有内容
为什么我不能在我的.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
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的问题。