我正在尝试使用以下.htaccess文件
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^images/
RewriteRule (.*) view.php?picid=$1 [L]
RewriteRule ^/user/(.*)$ /users.php?user=$1
我希望有两件事情发生:每当有人请求/1234
时,它会重定向到/view.php?picid=1234
,当有人访问/users/bob
时,它会重定向到/users.php?user=bob
。
然而,我的代码似乎无法正常工作。
答案 0 :(得分:1)
有几种方法可以做到这一点。这是一个应该有效的方法:
RewriteRule ^user/(.+)$ users.php?user=$1 [L]
RewriteRule ^([0-9]+)$ view.php?picid=$1 [L]
第一条规则将捕获任何URI路径以/user/
开头,后跟一个或多个任意字符的请求。第二个将捕获任何URI路径以/
开头后跟一个或多个数字的请求。
答案 1 :(得分:0)
规则的最初问题是带有(。*)的RewriteRule会匹配所有内容。
如果您不希望它匹配带斜杠的URL(例如users / bob),请尝试^([^ /] *)$
其次,在重写URL后,新URL会再次执行您的规则。如果你想避免匹配已经重写过一次的东西,你应该添加一个像
这样的条件RewriteCond %{REQUEST_URI} !\.php