【问题标题】:.htaccess redirect everything uknown except a few defined ones.htaccess 重定向所有未知的东西,除了一些已定义的
【发布时间】:2012-05-20 19:29:04
【问题描述】:

我想将/home 改写为index.php/edit 改写为edit.php,但其他所有内容,例如/asdfg 我想重定向到new.php

编辑和主页都在自己的工作上,但(.*) 优先于这些规则,我在没有RewriteCond 的情况下尝试过,但没有任何效果。

RewriteEngine on
RewriteBase /
RewriteRule ^home$ /index.php
RewriteRule ^edit$ /edit.php
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ /new.php [L,R=301]

我只需要将所有未定义的 URI 重定向到 /new.php

我还需要将/asdfg 保留在 URI 中,以便我可以使用 JavaScript 抓取它并显示适当的内容,或者显示一个页面以让用户发布新帖子或显示现有内容。

我无法定义所有现有内容,因为它来自数据库,只有少数预定义、保留的 "/folders" 将重定向到预定义页面。

我有以下工作:

RewriteEngine on
RewriteRule ^home$ /index.php [R]
RewriteRule ^edit$ /edit.php [R]

它把 /home 留在那里并转到 index.php

现在我只需要将所有未知请求重定向到默认页面 new.php。

我基本上是想防止用户收到 404 或任何其他错误,永远......

【问题讨论】:

    标签: .htaccess url-rewriting


    【解决方案1】:

    你需要在你的第一个 RewriteRule 中添加last 标志,使最后一个 RewriteRule 不生效:

    RewriteRule ^home$ index.php [L]
    RewriteRule ^edit$ edit.php [L]
    

    【讨论】:

    • 就可以了,但是,现在当我被定向到 /new.php 时,它不会将 /asdfg 留在那里...它会将 /new.php 放在那里,但我需要保留用户输入,以便能够用 javascript 抓取它..
    • 尝试从最后一条规则中删除R=301。这个R 标志强制重定向,而不是重写。
    • 这很奇怪,我试过了,但它仍然是 /new.php.. 但它似乎是浏览器缓存问题.. 当我为我的域使用另一个别名 tnx 时它起作用了!
    【解决方案2】:

    尝试将[L] 标志添加到“home”和“edit”规则,这样“new”规则一旦匹配就不会被处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      相关资源
      最近更新 更多