【发布时间】:2016-01-06 06:33:32
【问题描述】:
我已经搜索并搜索了这个问题的答案,但我在 stackoverflow 上找到的帖子都没有对我有用 - 在线 htaccess 生成器也没有。
我对 Anubhava 在htaccess redirect for dynamic urls not working 上的出色回答做了一些微调,以适应不同的页面名称,如下所示:
RewriteEngine On
# for external redirection from `/hp.php?su=sitename` to `/sitename`
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+hp\.php\?su=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=301,L]
# for internal redirection from `/sitename` to `/hp.php?su=sitename`
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /hp.php?su=$1 [L,QSA]
但是,除了将用户发送到 domain.com/sitename(上面修改过的代码)之外,我还想更改以下 url。
domain.com/newpage.php?su=sitename&PgID=1234&pu=pagename
成为
domain.com/sitename/1234/pagename.html
相似
domain.com/diary.php?su=sitename
成为
domain.com/sitename/diary.html
最后一个将被复制到类似的动态页面,例如
future.php?su=sitename >> domain.com/sitename/future.html
photos.php?su=sitename >> domain.com/sitename/photos.html
等
在未来的某个时间,我也想将http:// 转移到https:// - 这条规则会先于其他规则吗?
希望有人能帮忙
更新: 重写引擎开启
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/hp\.php\?su=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/newpage\.php\?su=([^\s&]+)&PgID=(\d+)&pu=([^&\s]+) [NC]
RewriteRule ^ /%1/%2/%3.html? [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/(diary|future|photos)\.php\?su=([^\s&]+) [NC]
RewriteRule ^ /%2/%1.html? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /hp.php?su=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/(diary|future|photos).html$ /$2.php?su=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/(\d+)/(.+)\.html$ /newpage.php?su=$1&PgID=$2&pu=$3 [L,QSA]
【问题讨论】:
标签: apache .htaccess mod-rewrite url-redirection friendly-url