RewriteRule将字符添加到重定向的URL

时间:2013-10-18 18:03:14

标签: php apache .htaccess mod-rewrite

我正在尝试使用一组RewriteRules,但是我没有得到将更改推送到服务器时的结果。我希望我可以安全地假设重写是可能的,因为我在读取.htaccess文件时没有收到服务器错误。

我遇到的问题的一个例子:

# (site)/about/faqs should link to about/about.php?p=faqs with this rule:  
RewriteRule ^about/faqs/?$ about/about.php?p=faqs [NC,L]  

这适用于本地。但是,当在服务器上使用相同的规则时,我会收到Not Found错误。 “在此服务器上找不到请求的网址/h/s(site)/public/about/about.php”。

我认为在主机端发生映射导致/ public /被添加到URL但我承认对此不太了解。我关心的是/ h / s和公众。

此外,服务器上还有其他规则:

<Files (filename)> # deny access to a utility file
    Order allow, deny
    Deny from all
</Files>  
AddOutputFilterByType DEFLATE text/plain (and other rules for html, css, etc) #Compression
<files *.html>
    SetOutputFilter DEFLATE
</files>
Options -Indexes # disable directory access  

我创建了这些规则作为阅读示例和堆栈的组合提示和提示。我也禁用了-Indexes,它没有引起任何变化。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

将您的规则更改为:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(about)/(faqs)/?$ /$1/about.php?p=$2 [NC,L,QSA]

在您的情况下,重写规则会额外添加/about以生成URI /h/s(site)/public/about/about.php