htaccess将url映射到新url并抛出404

时间:2014-10-16 20:27:34

标签: apache .htaccess mod-rewrite redirect

我试图在用户请求http://www.domain.com/thread-category/subdomain/时显示http://subdomain.domain.com而不更改地址栏中的网址。

但是,我不想要重复的内容,所以当用户/谷歌机器人请求http://www.domain.com/thread-category/subdomain/时,我想抛出404找不到的错误。

这是导致无限重定向循环的代码

RewriteEngine On
RewriteBase /

# Hide url
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteCond %{REQUEST_URI} /thread-category/([^\?\ ]*)/
RewriteRule . - [R=404,NC,L]


# Show /thread-category/subdomain/ for 'subdomain.domain.com'
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} !^(www)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/thread-category/%1/$1 [P]

基本上我将A重定向到B和B重定向到A等等。基本上我需要一种方法来检测htaccess是否正在访问该url或者其他人正在请求...我试过类似的东西:

RewriteCond %{ENV:REDIRECT_STATUS} !^(.*)$

但它不起作用。

我一直在寻找,但我找不到解决方法。停止此无限重定向循环的最佳方法是什么?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您需要在第一条规则中使用THE_REQUEST变量而不是REQUEST_URITHE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且在执行某些重写规则后它不会被覆盖。此变量的示例值为GET /index.php?id=123 HTTP/1.1

RewriteEngine On
RewriteBase /

# Hide url
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteCond %{THE_REQUEST} /thread-category/([^\?\ ]*)/
RewriteRule . - [R=404,L]

# Show /thread-category/subdomain/ for 'subdomain.domain.com'
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} !^(www)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/thread-category/%1/$1 [P,L]