在.htaccess中的子目录上重写GET请求

时间:2019-03-30 19:54:19

标签: php .htaccess mod-rewrite

我希望能够在子目录中重写一个简单的php GET请求:

  

http://localhost:8888/test/o/u/?username=jakepunton

看起来像这样:

  

http://localhost:8888/test/o/u/jakepunton/

尝试

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?u/(.*?)/?$ u/index.php?username=$1 [L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ u/index\.php\?username=([^\&\ ]+)
RewriteRule ^/?index\.php$ /u/%1? [L,R=301]

我看过here,但不知道我在看什么。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

假设test/o/u/是真实目录,则可以在test/o/u/.htaccess中使用以下规则:

RewriteEngine On
RewriteBase /test/o/u/

RewriteCond %{THE_REQUEST} \?username=([^\&\s]+)\s [NC]
RewriteRule ^$ %1? [L,R=301,NE]

RewriteCond %{THE_REQUEST} \?username=([^\&]+)&(edit)[=\s] [NC]
RewriteRule ^$ %1/%2? [L,R=301,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/(edit)/?$ index.php?username=$1&$2=true [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?username=$1 [L,QSA]