mod_rewrite:如何禁用重写规则的非干净url导航



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

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

示例:

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

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

我如何才能使第一个可见和可激活?

将其添加到同一个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的请求重定向到没有查询字符串的请求。

对此不能100%确定,但我认为如果将A重写为B,那么A和B都会工作。

我想问为什么http://mydomine.com/bookstore/book.php?id=123也可以航行吗?如果该链接也是有效的,并且用户可以同时使用这两个链接,问题是什么。。。尽管他们需要一些时间和运气才能发现第二种选择。他们这样做会得到什么?你会失去什么?如果这两种情况的答案都是"没有",那就不要再担心了如果您以前使用过旧链接,现在用新链接替换,那么客户的旧书签仍然有效是一件好事。

但是,假设您有充分的理由禁用旧的URL,那么同时更改它们如何呢。例如,将"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将停止工作。

好的,是一个丑陋的解决方案,但如果不重命名文件,而是将它们移动到一个子目录中,就像http://mydomine.com/xyz/bookstore/book.php?id=123。或者,您可以使用重定向添加一个"secret"参数,然后在PHP文件中检查它,例如rewritehttp://mydomine.com/bookstore/123到http://mydomine.com/bookstore/book.php?id=123&secret=xyz。当然,这只是一种"默默无闻的安全",但是。。。任何通过发现您的真实URL会获得什么?

最新更新