为什么我不能在.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
第二步 - 试图隐藏分机。
谢谢!
答案 0 :(得分:1)
由于您在第一个规则中使用模式[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_ROOT}%{REQUEST_URI}\.php
表达式用于构建.php
文件-f
用于检查.php
文件是否存在\w
与[a-zA-Z0-9_]
QSA
(查询字符串追加)标记在添加新查询参数时保留现有查询参数。答案 1 :(得分:0)
首先评估重写规则。如果模式为真,则将检查条件。如果删除前两个重写规则,则最后一次重写规则将评估为true并检查条件。
答案 2 :(得分:0)
我认为您需要使用RewriteEngine On
和[L, QSA]
。
QSA将查询字符串追加到末尾。 L意味着,在此之后不再处理任何规则'。
第二个RewriteEngine On
将其重新打开。
我可能对此非常误导,但......它应该有效。 然而,在决定为您的用户链接进行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]