htaccess重写url没有index.php文件名的GET参数

时间:2018-03-28 00:45:52

标签: php .htaccess mod-rewrite

我在个人资料目录中创建了一个.htaccess文件,并且能够更改网址:

http://www.legacycloud.org/profile/index.php?user={username}

http://www.legacycloud.org/profile/{username}

这很有效。但是如果用户忽略index.php并放置:

会发生什么
http://www.legacycloud.org/profile/?user={username}

通常情况下,用户不会知道url参数'user',但以防我如何保持make

http://www.legacycloud.org/profile/?user={username}

转换为

http://www.legacycloud.org/profile/{username}

我尝试使用我当前的代码

RewriteEngine On
RewriteBase /profile/

RewriteCond %{THE_REQUEST} \s/profile/index\.php\?user=([a-zA-Z0-9_-]*)\s [NC]
RewriteRule . %1? [R=301,L]

RewriteRule ^([a-zA-Z0-9-_]+)$ index.php?user=$1 [L]
#Code above works (Converts profile/index.php?user -> profile/user)

#Code below doesn't work (Needing to convert profile/?user -> profile/user)
RewriteCond %{THE_REQUEST} \s/?user=([a-zA-Z0-9_-]*)\s [NC]
RewriteRule . %1? [R=301,L]

RewriteRule ^([a-zA-Z0-9-_]+)$ ?user=$1 [L]

但这似乎行不通。我四处搜索某人有一个例子,但大多数代码包含一个php文件扩展名,当我尝试设置配置文件的路径并删除文件扩展名部分时,它仍然无效。

同样,上面代码的.htaccess文件夹位于配置文件目录中,而不是根目录。

如果您需要更多信息,请在下方发表评论。

1 个答案:

答案 0 :(得分:0)

您的重写条件实际上是匹配/?user=foobar之类的根级请求,但由于错误的模式,这与/profile/?user=foobar不匹配。您需要以%{THE_REQUEST}条件的模式编写完整的URL路径,因此请更改

`RewriteCond %{THE_REQUEST} \s/?user=([a-zA-Z0- 9_-]*)\s [NC]` 

`RewriteCond %{THE_REQUEST} \s/profile/?\?user=([a-zA-Z0- 9_-]*)\s [NC]` .

请在下面找到最终的.htaccess代码 -

RewriteEngine On
RewriteBase /profile/

RewriteCond %{THE_REQUEST} \s/profile/index\.php\?user=([a-zA-Z0-9_-]*)\s [NC]
RewriteRule . %1? [R=301,L]

RewriteRule ^([a-zA-Z0-9-_]+)$ index.php?user=$1 [L]
#Code above works (Converts profile/index.php?user -> profile/user)

#Code below doesn't work (Needing to convert profile/?user -> profile/user)
RewriteCond %{THE_REQUEST} \s/profile/?\?user=([a-zA-Z0- 9_-]*)\s [NC]
RewriteRule . %1? [R=301,L]
RewriteRule ^([a-zA-Z0- 9 -_]+)$ ?user=$1 [L]