我试图在用户请求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} !^(.*)$
但它不起作用。
我一直在寻找,但我找不到解决方法。停止此无限重定向循环的最佳方法是什么?
非常感谢!
答案 0 :(得分:0)
您需要在第一条规则中使用THE_REQUEST
变量而不是REQUEST_URI
。 THE_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]