我正在为我的项目使用漂亮的网址,它工作正常。
http://testurl.com/user/12345
我正在使用.htaccess进行重定向。
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} \s/user\.php\?id=([0-9]+)\s [NC]
RewriteRule ^ user/%1? [R=301,L]
RewriteCond %{THE_REQUEST} \s/user\.php\?id=([0-9]+)&name=([^&\s]+)\s [NC]
RewriteRule ^ user/%1/%2? [R=301,L]
RewriteRule ^user/([0-9]+)/?$ user.php?id=$1 [L]
RewriteRule ^user/([0-9]+)/([^/]+)$ user.php?id=$1&name=$2 [L]
今天我发现如果我在浏览器中更改此链接http://testurl.com/user.php
,那么页面也在加载我想显示错误消息(提醒),如果有人直接尝试访问
答案 0 :(得分:2)
最好的方法是在没有user.php
查询字符串的id
中添加错误或重定向。
但你也可以添加(RewriteBase /
之后):
RewriteCond %{THE_REQUEST} \s/user\.php\s [NC]
RewriteRule ^ - [F]
答案 1 :(得分:0)
您也可以通过代码重组来解决您的问题。我在我的一个项目中做到了这一点,它运作良好。
因此,在这种情况下,您可以在外部看到网址example.com/user.php?id=123
。现在,您需要一个漂亮的网址,例如example.com/user/123
。
在文件级别,在你有
之前- user.php
我建议您将其移至另一个目录,其中所有脚本都只能通过漂亮的URL访问:
- rewrites/
|- user.php
和你上面一样。
RewriteCond %{THE_REQUEST} \s/user\.php\?id=([0-9]+)\s [NC]
RewriteRule ^ user/%1? [R=301,L]
RewriteCond %{THE_REQUEST} \s/user\.php\?id=([0-9]+)&name=([^&\s]+)\s [NC]
RewriteRule ^ user/%1/%2? [R=301,L]
与上面相同,区别在于添加了目录名rewrites
。
RewriteRule ^user/([0-9]+)/?$ rewrites/user.php?id=$1 [L]
RewriteRule ^user/([0-9]+)/([^/]+)$ rewrites/user.php?id=$1&name=$2 [L]
example.com/user.php
现在因404 因为/user.php
在文件系统中不再存在,所以如果没有参数调用它会自动失败并显示404。
这种方法可能听起来像是无用的额外工作,但这些是我认为值得的好处:
.htaccess
错误处理规则