特定页面的apache重写规则问题

Posted

技术标签:

【中文标题】特定页面的apache重写规则问题【英文标题】:apache rewrite rules issue for specific pages 【发布时间】:2012-01-05 21:08:31 【问题描述】:

我的 .htaccess 重定向有问题。当我输入时:

http://www.domain.com/contact

它转到 index.php 而不是 contact.php

这是我的 .htaccess:

Redirect 301 /clients http://clients.domain.com

RewriteEngine On
SetEnvIf Host ^www\. page=www
SetEnvIf Host ^mob\. page=mobile

RewriteBase /
SetEnvIfNoCase User-Agent "^Wget" bad_bo
#etc ... 
Deny from env=bad_bot

RewriteCond %HTTP_HOST !^www.domain.com
RewriteRule (.*) http://www.domain.com/$1 [R=301]

RewriteRule ^about/?$ about.php 
RewriteRule ^contact/?$ contact.php 

rewriterule ^(.*)$ index.php?subdomain=%ENV:page&page=$1 

在我的 php 中我得到:

<?php

print_r($_GET);
Array (
  [subdomain] => www
  [page] => contact.php
) 

我错过了什么?

【问题讨论】:

您在联系后错过了最后的'/' @TobyAllen /? 带问号规则要么使用 / 要么不使用 【参考方案1】:

您需要通过以下方式重写您的 about 和 contact 规则:

RewriteRule ^about/?$ about.php [L,QSA]
RewriteRule ^contact/?$ contact.php [L,QSA]

【讨论】:

【参考方案2】:

试试这个规则:

RewriteCond %HTTP_HOST !^www.domain.com [NC]
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]

RewriteRule ^about/?$ about.php [NC,QSA,L]
RewriteRule ^contact/?$ contact.php [NC,QSA,L]

rewriterule ^([a-z0-9]+)$ index.php?subdomain=%ENV:page&page=$1 [NC,QSA,L]

我还添加了NC, QSA, L 标志以确保在匹配时执行最后一条规则[L][NC] 用于非大小写,[QSA] 用于查询字符串追加。

【讨论】:

以上是关于特定页面的apache重写规则问题的主要内容,如果未能解决你的问题,请参考以下文章

apache重写规则可以进入httpd.conf吗

Apache用参数重写规则?

使用 apache 重写规则的问题

Apache 多重重写规则

301 重写/重定向规则导致 500 内部服务器错误

花括号( 和 )从 Apache 到 Nginx 重写规则。