【问题标题】:.htaccess mod_rewrite for pretty urls not working.htaccess mod_rewrite 对于漂亮的 url 不起作用
【发布时间】:2012-08-04 06:14:57
【问题描述】:

试图让 www.example.com/test.php?archives=testing 到 www.example.com/archives/testing

根据godaddy的说法,他们默认启用了mod_rewrite

这是我的 .htaccess 文件:

rewriteengine on
rewritecond %{HTTP_HOST} ^example.com$
rewriterule ^example\/(.*)$ "http\:\/\/www\.example\.com\/$1" [R=301]
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^archives/(\w+)$ test.php?archives=$1 [L]

但是这不起作用,当我访问 www.example.com/archives/test 时,我得到一个 404,建议

【问题讨论】:

  • 什么情况下它不起作用?很可能它是你的正则表达式 ([a-z]+)$ 那不适合你。我相信您还需要几个条件来触发规则。
  • 它必须工作,即使没有Options 行。请参阅 accessrewrite 日志。 Mod_rewrite 无法正常工作。
  • 我之前在 godaddy 上托管了一个网站,也遇到了一些 url 重写的问题,但它现在工作正常,在我的 htaccess 文件中,我没有 Options +FollowSymLinks -MultiViewsRewriteBase /,也许试一试?
  • @chris 你能提供一个关于如何触发重写的链接
  • 这是我不久前为某人提供的简短 url 渲染的答案。它在概念上是您尝试做的,但必须进行一些更改以满足您的特定需求。stackoverflow.com/questions/11022509/…

标签: php .htaccess mod-rewrite


【解决方案1】:

我只是在评论中留下了这个,但我不妨把它放在这里,这样看起来更容易。我为随着时间的推移帮助他人的人写了一个答案,最后这并不完全是您所要求的答案,但它更像是朝着这个方向发展的垫脚石。最初的问题是如何使用短 url 字符串并使它们以您正在寻找的方式工作,而是在此处复制并粘贴该答案。我会让你去那里读一读。

不言而喻,您需要根据自己的特定需求稍微修改规则,但它最终会达到将您带到您想去的地方的目的。

PHP dynamic DB page rewrite URL

【讨论】:

    【解决方案2】:

    您需要一些重写条件来指定何时使用此规则。没有它们,您将无限期地运行相同的重写规则,给您一个错误。试试:

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

    【讨论】:

    • Rewritecond 应该在不同的行上,我用的是手机,所以格式是关闭的。
    • [L] 标志告诉 mod rewrite 这是要应用的最后一条规则,它应该与 rewrite 规则在同一行,前面有一个空格。
    • 谢谢 尝试过,但去 example.com/test.php?archives=test 时没有运气,url 保持不变。
    • Mod_rewrite 适用于不存在的 url,因此您实际上应该将流量引导到 example.com/archives/test。 Mod rewrite 然后静默地将 URL 重写为实际存在的文件,并显示该文件而不是不存在的文件。
    • 我在尝试访问 example.com/archives/test 时收到 404
    【解决方案3】:

    这个怎么样:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^archives/(.+)$ /test.php?archives=$1 [L]
    </IfModule>
    

    【讨论】:

      【解决方案4】:

      如果我不非常清楚你想从你的重写中得到什么,我建议:

      Options -MultiViews
      ErrorDocument 404 default
      RewriteBase /
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-09
        • 2012-05-28
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-01
        • 1970-01-01
        相关资源
        最近更新 更多