.htaccess /?p = test改为/ test

时间:2013-12-10 06:39:07

标签: php apache .htaccess mod-rewrite

这是网址
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 /到文件夹名称,但这是自动的,所以我不担心它谢谢大家的帮助。

3 个答案:

答案 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]

注意:我在我的一个网站上对此进行了测试,并且有效