我想映射:
mywebsite.com/users/
- > mywebsite.com/users/users.php
mywebsite.com/users
- > mywebsite.com/users/users.php
mywebsite.com/users/username
- > mywebsite.com/users/user.php?name=username
目前,我在用户目录中使用此.htaccess:
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_])*$ user.php?name=$1 [L]
RewriteRule ^.*$ users.php [L]
但是,它永远不会生成user.php?name=$1
网址。
为什么不起作用?
答案 0 :(得分:1)
以下是规则(放在网站根文件夹中的 .htaccess 。如果放在别处,则需要进行一些调整):
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
# 1
RewriteRule ^users/?$ /users/users.php [L]
# 2
RewriteCond %{REQUEST_URI} !^/users/users?\.php
RewriteRule ^users/([^/]+)$ /users/user.php?name=$1 [QSA,L]
规则#1将匹配您的第2个网址。
规则#2将适用于特定的用户映射。它将确保它不会重写已经重写的URL。
<强>更新强>
如果要将其放入/users/
文件夹中的.htaccess文件中,则此URL mywebsite.com/users
(不带斜杠)很可能无效。
但无论如何 - 这是规则:
Options +FollowSymLinks -MultiViews
RewriteEngine On
# 1
RewriteRule ^$ users.php [L]
# 2
RewriteCond %{REQUEST_URI} !^/users/users?\.php
RewriteRule ^([^/]+)$ user.php?name=$1 [QSA,L]
答案 1 :(得分:0)
我认为它按顺序应用这两个规则:url匹配第一个规则,因此它添加user.php?name=$1
,然后它匹配第二个规则,因此它用{{1}替换字符串}。如果这是问题,那么对于您的特定情况,您可以通过将第二个正则表达式替换为users.php
来修复它。