mod_rewrite添加完整目录

时间:2015-03-03 15:01:34

标签: php apache .htaccess mod-rewrite url-rewriting

我有一个.htaccess文件来控制我的Apache服务器。在打开RewriteEngine后,我有一个正常的重写规则:

RewriteRule ^display\.php/([a-zA-Z0-9-z\-]+)$ "https://pastelink.net/display?q=$1" [R=301,L]

在下一行,我正在尝试添加另一条规则,将sitemap.xml重定向到sitemap.php。

我试过了两个:

RewriteRule ^sitemap.xml$ "https://pastelink.net/sitemap.php" [R=301, L]

RewriteRule ^sitemap.xml sitemap.php [R=301, L]

以及包括或省略^ $和旗帜的其他组合。结果每次重写一次:

https://pastelink.net/home/pastelin/public_html/sitemap.php

当我的意图是这样的时候:

https://pastelink.net/sitemap.php

为什么将这些额外目录添加到URL中?我不明白为什么它对第一次重写规则的行为会有所不同。我可以发布整个.htaccess文件,如果这有帮助,虽然L标志应该使代码跟随无关紧要。

1 个答案:

答案 0 :(得分:1)

对于静默重写规则,您不需要http://。保持你的root .htaccess:

RewriteEngine On
RewriteBase /

RewriteRule ^display\.php/([\w-]+)/?$ https://pastelink.net/display?q=$1 [R=301,L,QSA,NC]
RewriteRule ^sitemap\.xml$ sitemap.php [NC,L]

在测试这些更改之前,您应该清除浏览器缓存。