【问题标题】:mod_rewrite, only access one part of URL for blog entrymod_rewrite,只访问博客条目的URL的一部分
【发布时间】:2011-02-11 08:32:48
【问题描述】:

在我工作过的其他网站中,我已经能够使用 .htaccess 中的以下内容轻松生成搜索引擎友好的 URL:

<files entry>
ForceType application/x-httpd-php5
</files>

我正在开发由一家公司托管的网站,该公司将 PHP 作为快速 CGI 运行,但这不起作用。我正在尝试实现以下 URL - http://somewhere.com/blog/entry/12/this-is-the-title

我只是在寻找 id(在示例中为 12)并且不一定需要标题(我背后的逻辑是标题可能会被客户端更改,链接可能会损坏)。我尝试了以下 mod_rewrite 但如果我添加标题它不起作用:

    RewriteEngine on
    RewriteRule ^entry/([^/\.]+)/?$ index.php?id=$1 [L]

我以前从未使用过 mod_rewrite,而且我遇到的很多文档都是关于实现更复杂的结果。任何帮助将不胜感激

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    如果 .htaccess 文件实际上被放置为 /blog/.htaccess,您将需要一个 RewriteBase /blog/ 行。

    仅查找数字也有助于限制返回的 id。

    RewriteRule ^blog/entry/([01-9]+)/?$ index.php?id=$1 [L]
    

    这也会删除正则表达式的 '/?$' 部分。末尾的 '$' 将匹配项锚定到字符串的末尾 - 您只需要数字,并且可以忽略任何不是数字的内容。

    【讨论】:

    • .htaccess 在博客目录中,所以它变成了RewriteRule ^entry/([01-9]+)/?$ index.php?id=$1 [L] 这在我尝试添加标题之前有效,例如somewhere.com/blog/entry/23 有效,somewhere.com/blog/entry/23/the-title 结果为 404
    • 然后删除正则表达式的 '/?$' 部分。 '$' 将匹配锚定到字符串的末尾 - 您只需要数字,并且可以忽略任何不是数字的内容。
    • 我可能说得太早了.. 当我去实际实现这个时,使用正确的 entry.php 文件名,它没有通过id。这是 .htaccess :RewriteEngine on RewriteBase /blog/ RewriteRule ^blog/entry/([01-9]+)/ entry.php?id=$1 [L] 想法?如果它指向 index.php(传递 ID)似乎可以工作 - 现在它进入 entry.php 但没有 ID
    • 好的,我在另一个域/主机上试过了,效果很好。 GoDaddy(我的问题中的主机)可能有什么问题吗?
    • 显然要回答我自己的评论问题。处理 GoDaddy 支持是一场噩梦,我不知道为什么配置不起作用,但我最终通过简单地将“entry.php”重命名为“article.php”并对 .htaccess 进行必要的更改来解决它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多