这是网址
http://www.example.com/main/index.php?p=test
我希望它成为这个
http://www.example.com/test
我当前的.htaccess看起来像这样
RewriteOptions inherit
RewriteEngine on
RewriteCond %{HTTP_HOST} ^.*$
RewriteRule ^template\/?(.*)$ "http\:\/\/www\.example\.com\/$1" [R=301,L]
RewriteCond %{THE_REQUEST} \s/+index\.php\?p=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=302,L]
RewriteRule ^([^./]*)/?$ /index.php/?p=$1 [L,QSA]
根据这些规则,我最后才会这样做
/主/
我尝试了很多其他的重写规则,但这个规则似乎是我能得到的最接近的规则。
MY FIX
RewriteEngine On
RewriteRule ^([^/]*)\/$ /main/index.php?p=$1 [L]
它并没有完全符合我的要求,但我很接近,因为我可以得到并且工作。 我们没有看到http://www.example.com/main/index.php?p=test,而是看到http://www.example.com/main/test/ 希望/测试,但/ test /会这样做。我还必须在每个子文件夹中都有这个并更改/ main /到文件夹名称,但这是自动的,所以我不担心它谢谢大家的帮助。
答案 0 :(得分:1)
删除前导斜杠。 .htaccess
是每个目录指令,Apache从RewriteRule
URI模式中剥离当前目录路径(从而导致斜杠)。
尝试此规则:
RewriteEngine on
RewriteRule ^template/?(.*)$ http://www.example.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} \s/+index\.php\?p=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=302,L]
RewriteRule ^([^./]+)/?$ /index.php/?p=$1 [L,QSA]
答案 1 :(得分:0)
将.htaccess文件放在根目录(/)而非主文件夹(/ main)
中更新
RewriteEngine On
RewriteRule ^(.*?)$ main/index.php?p=$1 [QSA]
请尝试以上
答案 2 :(得分:0)
你说你在根目录中有这个,因此你需要将main添加到你的htaccess正则表达式,否则代码将指向错误的目录。如果有效,请告诉我
# add /main
RewriteCond %{THE_REQUEST} \s/+main/index\.php\?p=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=302,L]
#add /main
RewriteRule ^([^./]*)/?$ /main/index.php/?p=$1 [L,QSA]
注意:我在我的一个网站上对此进行了测试,并且有效