htaccess重写在参数表末尾给出off.php

htaccess重写在参数表末尾给出off.php,php,apache,.htaccess,Php,Apache,.htaccess,我已经创建了自己的.htaccess文件,目的是更改我网站的用户名URL(同时从所有URL中删除.php扩展名) 其目的是将URL转换为: www.example.one/profile.php?id=username 到 www.example.one/username 我知道这是“用户名”htaccess重写的常见问题,但是,我所找到的答案都没有帮助我解决问题 这是我的全文.htaccess: Options -Indexes Options +FollowSymLinks Rewrite

我已经创建了自己的
.htaccess
文件,目的是更改我网站的用户名URL(同时从所有URL中删除
.php
扩展名)

其目的是将URL转换为:

www.example.one/profile.php?id=username

www.example.one/username

我知道这是“用户名”htaccess重写的常见问题,但是,我所找到的答案都没有帮助我解决问题

这是我的全文
.htaccess

Options -Indexes
Options +FollowSymLinks

RewriteEngine On

# only allow rewriting to paths that dont exist
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

# redirect example.one to www.*
RewriteCond %{HTTP_HOST} ^example\.one$ [NC]
RewriteRule ^(.*)$ http://www.example.one [R=301,L]

# no php extension
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

# example.one/username
RewriteRule ^/([a-zA-Z_\-0-9]+)*$ ./profile.php?id=$1

干杯。

您可以在站点根目录中使用这些规则。htaccess:

Options +FollowSymLinks -Indexes

RewriteEngine On

# redirect example.one to www.*
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /profile\.php\?id=([\w-]+) [NC]
RewriteRule ^ /%1? [R=301,L]

# no php extension
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

# example.one/username
# only allow rewriting to paths that dont exist
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w-]+)/?$ profile.php?id=$1 [L,QSA]

我建议您使用
/profile/{username}
,否则许多URL将被解释为存在用户名。例如
/home
/about
,等等@AnthonyB这就是我使用第二段代码的原因。防止实际路径出错。当我尝试
/username
时,您的块
没有php扩展名
正在尝试添加“.php”扩展名。谢谢您的回答!但是第二个代码块(
([^\s&]+)
)和最后一个代码块(
([\w=]+)
)中的正则表达式做什么呢?谢谢,但我的问题是他们的目标是什么?
([\w=]+)
匹配1+个单词或连字符
([^\s&]+)
匹配问题的1+非空格、非字符。但是,他们不应该在选择用户名时只针对用户可用的字符吗?哦,我不知道!谢谢:)