mod_rewrite:如何禁用不清除urls导航的重写规则

时间:2012-09-10 10:19:57

标签: .htaccess mod-rewrite

我已启用mod_rewrite模块,一切正常。

我为网址创建了简单的规则,但如何使用参数禁用网址导航(重写)?

示例:

# rewrite rule for cleaning
RewriteRule ^bookstore/([0-9]+)?$ /bookstore/book.php?id=$1 [L]

现在,如果我导航到http://mydomine.com/bookstore/123所有内容都已完成,但网址http://mydomine.com/bookstore/book.php?id=123也可以导航。

我怎样才能使第一个显而易见并且可以隐藏?

2 个答案:

答案 0 :(得分:0)

不是100%肯定这一点,但我认为如果你将A重写为B,那么A和B都会有效。

我想问为什么确切地说http://mydomine.com/bookstore/book.php?id=123可导航的问题究竟是什么?如果该链接也是有效的,那么问题是什么,并且用户可以使用这两个链接...尽管发现第二个选项需要一些时间和运气。这样做会让他们获得什么?你会失去什么?如果两种情况下的答案都是“没有”,那么就干脆担心。 :)如果您之前使用旧链接,现在用新链接替换,那么您的客户的旧书签仍然可以正常运行 good

但假设您有充分的理由禁用旧网址,那么如何更改它们。例如,将“book.php”重命名为“xyz.php”,然后将http://mydomine.com/bookstore/123重定向到http://mydomine.com/bookstore/xyz.php?id=123 - 旧http://mydomine.com/bookstore/book.php?id=123将停止工作。

好的, 是一个丑陋的解决方案,但是如果不是重命名文件而是将它们移动到子目录,例如{{3} }。或者,您可以使用重定向添加“secret”参数,然后在PHP文件中进行检查,例如将http://mydomine.com/xyz/bookstore/book.php?id=123重写为http://mydomine.com/bookstore/123。当然,它只是一个“默默无闻的安全”,但又一次......通过发现你的真实网址,究竟谁会获得

答案 1 :(得分:0)

将其添加到同一个htaccess文件中:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /bookstore/book\.php\?id=([0-9]*)
RewriteRule ^bookstore/book\.php$ /bookstore/%1? [L,R=301]

这将301将带有查询字符串的URI的请求重定向到没有。

的URI