使用.htaccess重写URL

使用.htaccess重写URL,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我正在尝试使用htaccess获取一个要重写的url,但似乎无法使其正常工作 我正在尝试重写,以便将其输入为,但尝试以下操作时出现错误: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^pages/blog/(.+)$ pages/blog/article.php?article=$1 [NC,L] 有人能看出我哪里出

我正在尝试使用htaccess获取一个要重写的url,但似乎无法使其正常工作

我正在尝试重写,以便将其输入为,但尝试以下操作时出现错误:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 

RewriteRule  ^pages/blog/(.+)$   pages/blog/article.php?article=$1 [NC,L]
有人能看出我哪里出了问题,因为这只给了我一个404错误。提前谢谢

我正试图重写 这样就可以 作为一名注册者,但我得到了一个 尝试以下操作时出错:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 

RewriteRule  ^pages/blog/(.+)$   pages/blog/article.php?article=$1 [NC,L]
你的措辞令人困惑,但我相信这就是你的意思:

真正的url是:

您希望能够使用“友好”url:指向真实url

RewriteEngine on  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule  ^pages/blog/(.+)$  /pages/blog/article.php?article=$1   [QSA,L]
前两个测试问:这是一个存在的目录吗?这是一个存在的文件吗?因为article.php是一个文件,所以它不会包含在这个操作中,所以您不会进入一个无休止的循环,这总是因为重写规则不正确而带来的风险

获取给定的url,并使用查询字符串附加(QSA)将所需数据附加到将处理请求的实际文件。这不是重写,因为用户看到的url没有改变,这只在apache内部发生,apache使用所需的信息将请求发送到所需的目标

您必须测试文件或目录是否存在,否则您将不正确地应用此规则,因为它只应在目标不存在时应用。这基本上就是所有博客/cms“搜索引擎友好URL”的工作原理,或多或少

最后,因为目标是/blog.php?article=blog条目,所以不能跳过前面的/


但是,我不清楚为什么您希望友好的url如此长,而您可以将其缩短,使其更友好:例如,pages/[文章名称]

/pages/blog/.htaccess中使用此规则:

RewriteEngine on 
RewriteBase /pages/blog/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ article.php?article=$1 [QSA,L]

嗨,不,我想把/pages/blog/article.php?article=article name重写为/pages/blog/article name,这样我就可以在php查询中使用&_GET['article'],这是一个真正的目录吗?是的,/pages/blog都是真实的文件夹,所以我想将/article name重写为article.php?article=article name?我明白你的意思了。。。我编辑了这个问题,因为它不对。
RewriteCond%{REQUEST\u URI}-d
应替换为
RewriteCond%{REQUEST\u FILENAME}-d
因为
-f
-d
需要完整的文件系统路径。brain bloop,感谢您的更正,修复了它。顺便说一句,我倾向于在实践中避免将小型htaccess文件放得到处都是,跟踪它们太难了,只需在/中使用一个具有完整路径的主文件就更容易了。