RewriteRule ^([^\/]*)/$ user.php?name=$1 [L,NC]
RewriteRule ^([^\/]*)/([^\/]*)/$ user.php?name=$1&a=$2 [L,NC]
RewriteRule ^([^\/]*)/([^\/]*)/([^\/]*)/$ user.php?name=$1&a=$2&id=$3 [L,NC]
我的网站可能是3个网址格式。
1. http://www.domain.com/user.php?name=tom
http://www.domain.com/user.php?name=mary
etc....
2. http://www.domain.com/user.php?name=tom&a=v
http://www.domain.com/user.php?name=tom&a=photo
etc....
3. http://www.domain.com/user.php?name=tom&a=v&id=9889
http://www.domain.com/user.php?name=tom&a=photo&id=123
http://www.domain.com/user.php?name=tom&a=data&id=123
基本上,只有三个值
我想将url改为301 url重写为domain.com/a/b/c/
这些htaccess代码没问题。但并不完美。
test1:
不行 http://www.domain.com/tom至 - > http://www.domain.com/user.php?name=tom
工作 http://www.domain.com/tom / to - > http://www.domain.com/user.php?name=tom
test2:
不行 http://www.domain.com/mary/v至 - > http://www.domain.com/user.php?name=mary&a=v
工作 http://www.domain.com/mary/v / to - > http://www.domain.com/user.php?name=mary&a=v
test3 :
不行 http://www.domain.com/kate/photo/123至 - > http://www.domain.com/user.php?name=kate&a=photo&id=123
工作 http://www.domain.com/kate/photo/123 / to - > http://www.domain.com/user.php?name=kate&a=photo&id=123
我希望用户输入的网址更加用户友好或更自由
所以,如何让他们工作?用户可以输入“/”,也可以输入
http://www.domain.com/kate/photo/123
任何人都可以给我一些建议吗?还是更聪明的代码?
更多一个网址重写问题...如果没有'/'自动添加'/',htaccess可以设置这些链接?
答案 0 :(得分:1)
问号量词?
匹配出现零或一。这基本上是'用户可以输入'/'或不是'
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^\/]+)/?$ user.php?name=$1 [L,NC]
RewriteRule ^([^\/]+)/([^\/]+)/?$ user.php?name=$1&a=$2 [L,NC]
RewriteRule ^([^\/]+)/([^\/]+)/([^\/]+)/?$ user.php?name=$1&a=$2&id=$3 [L,NC]
注意:这不是SEO友好,因为您提供了两个相同内容的网址。
如果您在键入正斜杠时不希望用户出错,则应将其重定向到非正斜杠网址,而不是将其提供给该网址上的内容。
修改强>
但如果用户不使用'/'来我的网站。我可以使用htaccess发送它们来使用'/'吗?
这将用户从非尾随斜杠网址重定向到带有斜杠的网址
# add trailing slash, when not present
RewriteCond %{REQUEST_URI} !(/$)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
# notice the ? is gone
RewriteRule ^([^\/]+)/$ user.php?name=$1 [L,NC]
RewriteRule ^([^\/]+)/([^\/]+)/$ user.php?name=$1&a=$2 [L,NC]
RewriteRule ^([^\/]+)/([^\/]+)/([^\/]+)/$ user.php?name=$1&a=$2&id=$3 [L,NC]
这是我的头脑,所以试一试,让我知道它是否有效
答案 1 :(得分:1)
使用:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^([^\/]+)$ $1/ [R=301,L]
RewriteRule ^([^\/]+/[^\/]+)$ $1/ [R=301,L]
RewriteRule ^([^\/]+/[^\/]+/[^\/]+)$ $1/ [R=301,L]
RewriteRule ^([^\/]+)/?$ /user.php?name=$1 [L]
RewriteRule ^([^\/]+)/([^\/]+)/?$ /user.php?name=$1&a=$2 [L]
RewriteRule ^([^\/]+)/([^\/]+)/([^\/]+)/?$ /user.php?name=$1&a=$2&id=$3 [L]
在/
user