我正在尝试使用htaccess重写网址,但似乎无法让它正常工作。
我正在尝试重写http://website.com/pages/blog/article.php?article=blog-entry,以便可以输入http://website.com/pages/blog/blog-entry但我在尝试以下操作时遇到错误:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^pages/blog/(.+)$ pages/blog/article.php?article=$1 [NC,L]
任何人都可以看到我出错的地方,因为这只是给我一个404错误。提前谢谢。
答案 0 :(得分:1)
我正在尝试改写 http://website.com/pages/blog.php?article=blog-entry以便它可以 输入为http://website.com/pages/blog/blog-entry,但我得到了一个 尝试以下操作时出错:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond
%{REQUEST_FILENAME}\.php -f
RewriteRule ^pages/blog/(.+)$ pages/blog/article.php?article=$1
[NC,L]
你的措辞令人困惑,但我相信这就是你的意思:
真正的网址是:http://website.com/pages/blog.php?article=blog-entry
您希望能够使用“友好”网址:http://website.com/pages/blog/blog-entry指向真实网址。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^pages/blog/(.+)$ /pages/blog/article.php?article=$1 [QSA,L]
前两个测试问:这是一个存在的目录吗?这是一个存在的文件吗?因为article.php是一个文件,所以它不会包含在这个动作中,所以你不会进入无限循环,这总是存在错误地重写规则的风险。
获取给定的URL,并使用查询字符串append(QSA)将所需数据附加到将处理请求的实际文件。这不是重写,因为用户看到的url不会改变,这只发生在apache内部,它将请求发送到所需目标,并带有所需信息。
您必须测试文件或目录是否存在,否则您将错误地应用此规则,因为它只应在目标不存在时应用。这基本上是所有blog / cms的搜索引擎友好网址的工作方式,或多或少。
最后,因为目标是/blog.php?article=blog-entry你不能跳过前导/.
然而,我不清楚为什么你想要友好的网址这么久,当你可以简短,友善时:比如,页面/ [文章名称]
答案 1 :(得分:1)
在/pages/blog/.htaccess
:
RewriteEngine on
RewriteBase /pages/blog/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ article.php?article=$1 [QSA,L]