Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache htaccess将url映射到新url并抛出404_Apache_.htaccess_Mod Rewrite_Redirect - Fatal编程技术网

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

Apache htaccess将url映射到新url并抛出404,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我试图在不更改地址栏中的url的情况下显示用户请求的时间 然而,我不想重复内容,所以当用户/googlebot请求时,我想抛出404notfound错误 这是导致无限重定向循环的代码 RewriteEngine On RewriteBase / # Hide url RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC] RewriteCond %{REQUEST_URI} /thread-category/([^\?\ ]*)/ RewriteRule

我试图在不更改地址栏中的url的情况下显示用户请求的时间

然而,我不想重复内容,所以当用户/googlebot请求时,我想抛出404notfound错误

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

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,以此类推。。基本上,我需要一种方法来检测该url是被htaccess访问还是被其他人请求。。。我试过这样的方法:

RewriteCond %{ENV:REDIRECT_STATUS} !^(.*)$
但它不起作用

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


非常感谢

您需要在第一条规则中使用
请求变量,而不是
请求URI
_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]

我也尝试过类似的方法,但没有成功。。。当尝试使用subdomain.domain.com访问时,我得到“在该服务器上找不到请求的URL/thread category/science/”—404找不到。我不知道是什么导致了这个错误。。。谢谢你的回复!!第一条404规则只会影响
www.domain.com
,因为这是
RewriteCond%{HTTP\u HOST}^www\.domain\.com[NC]
条件。您在浏览器中输入了什么URL?您的.htaccess中是否有更多的规则?我对所有其他规则进行了注释,以确保它们不会干扰这些规则。访问URL(subdomain.domain.com)和(www.domain.com/thread category/subdomain/)时,我发现404未找到错误。更糟糕的是,我在一个共享环境中,无法访问日志文件来查看发生了什么。。。另一方面,它说:“在尝试使用ErrorDocument处理请求时遇到了500内部服务器错误”。注释掉
隐藏url
下面的3行,然后查看404/500是否仅使用第二条规则
www.domain.com/thread category/subdomain/
,我得到404未找到-“在此服务器上找不到请求的URL/thread category/science/。”但如果启用wordpress multisite htaccess规则,则可以正常工作。