例如,我有一个用于吉他和弦的子域。 http://tabs.sitename.com/?song=song_name 我想将此网址重写为 http://tabs.sitename.com/song/song_name 我尝试使用以下代码,但我的网址没有重写。
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^song/([^/]*)/$ /?song=$1 [L]
网址没有重写。我错过了什么吗?请帮忙
例如,我有一个用于吉他和弦的子域。 http://tabs.sitename.com/?song=song_name 我想将此网址重写为 http://tabs.sitename.com/song/song_name 我尝试使用以下代码,但我的网址没有重写。
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^song/([^/]*)/$ /?song=$1 [L]
网址没有重写。我错过了什么吗?请帮忙
首先,您提供的模式:
^song/([^/]*)/$
与您尝试匹配的字符串不匹配:
song/Bistarai+Bistarai
因此,下次在继续之前确保您的模式有效会有所帮助。
假设我完全理解您想要做什么,这应该可以工作(重定向目标文件上的 php 扩展名只是一个示例,使用您真正的目标文件是什么):
RewriteRule ^song\/([A-Za-z0-9\+]+) file_you_want_to_redirect_to.php?song=$1
正如我提到的,我在上面的示例中使用了一个 php 脚本;如果我理解你试图重定向到 http://tabs.musiccafenepal.com/的索引页面,你应该知道你应该把
index.php?song=$1
代替
/?song=$1
作为重定向目标表达式。
试试这些规则:
Options +FollowSymLinks
RewriteEngine On
# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/\?(song)=([^\s&]+) [NC]
RewriteRule ^ /$1/$2? [R=301,L,NE]
# internal forward from pretty URL to actual one
RewriteRule ^song/([^/]+)/$ /?song=$1 [L,QSA,NE]