0

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

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

例子:

# 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也是可导航的。

我怎样才能使第一个可见和可访问?

4

2 回答 2

0

不是 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 ,您可以做得更好。或者,您可以使用重定向添加“秘密”参数,然后在 PHP 文件中检查它,例如将 http://mydomine.com/bookstore/123 重写http://mydomine.com/bookstore/book 。 php?id=123&secret=xyz。当然,这只是一种“默默无闻的安全”,但同样......任何人通过发现您的真实 URL究竟会获得什么?

于 2012-09-10T11:09:24.347 回答
0

将此添加到相同的 htaccess 文件中:

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

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

于 2012-09-10T11:14:48.923 回答