使用 mod_rewrite 清理 URL

Vin*_*gen -3 apache .htaccess mod-rewrite

我的网站用户个人资料页面是

http://website.com/profile?name=test
Run Code Online (Sandbox Code Playgroud)

我正在使用 get 方法来获取变量名称, 我试图使上面的 url 被清理,例如,

http://website.com/test
Run Code Online (Sandbox Code Playgroud)

我的 .htaccess 内容

RewriteEngine On
RewriteBase /creatorsink/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L]
RewriteRule ^([a-z]+)/?$ profile.php?name=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

有没有办法通过选择获取名称来做到这一点?

Ben*_*enM 5

您可以使用mod_rewrite。例如,您的.htaccess文件应如下所示:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ profile.php?name=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

下面对上面的内容做一个简单的解释:

  • RewriteEngine On打开引擎(如预期)。

  • RewriteCond %{REQUEST_FILENAME} !-f如果请求文件名存在并且是一个文件,则不会重写任何内容。

  • RewriteCond %{REQUEST_FILENAME} !-d如果请求文件名存在并且是一个目录,则不会重写任何内容。

  • RewriteRule ^([^/]+)/?$ profile.php?name=$1 [L,QSA]这是实际的重写规则。它采用域名后面的任何内容(除正斜杠之外的任何内容),并将其重写为profile.php,并将其作为name参数传递。