htaccess [L]旗帜没有用

时间:2016-05-28 11:35:31

标签: regex apache .htaccess

我在xampps的htdocs里面的searchEngine文件夹里面有这样的.htaccess文件

<!DOCTYPE html>
<html lang="de">
<head>
	<link href="styles/styles.css" rel="stylesheet"/>
	<meta charset="utf-8">

</head>
	<body>
		<div class="main-container">
			<h1 id="titlebar" class="titlebar"> Titlebar</h1>
			<div class="center-container" >
					<button id="button1">Button1</button>
					<button id="button2">Button2</button>
					<button id="button3">Button3</button>
			</div>
		</div>
		<script>
			var titlebar = document.querySelector('h1#titlebar');
			var button1 = document.querySelector('#button1');
			var button2 = document.querySelector('#button2');
			var button3 = document.querySelector('#button3');

			button1.addEventListener('click', function() {
				titlebar.innerHTML = 'Button1';

				var result = titlebar.classList.contains('darktitle');
				console.log(result);
				titlebar.classList.add('darktitle');
				var result = titlebar.classList.contains('darktitle');
				console.log(result);

			});
		</script>
	</body>
</html>

然后我在地址栏中输入:

  • localhost / searchEngine / test

为什么要重定向到

不是

  • 视图/的index.php?

我认为必须重定向到

  • view / index.php

不是

2 个答案:

答案 0 :(得分:1)

这是因为mod_rewrite在一个循环中运行。第一条规则就是这样做:

起始网址:

/searchEngine/test

结束网址:

/searchEngine/view/index.php

现在L标志会导致mod_rewrite再次循环播放。所以现在您的起始网址变为:

起始网址:

/searchEngine/view/index.php

现在第一个规则'模式^test不匹配,但您的第二个规则使用.*作为匹配模式,因此重定向到google

您可以按照以下规则来防止此行为:

RewriteEngine On

RewriteRule ^/?test$ view/index.php [NC,L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^ http://google.com [R,L]

第二条规则有另外一个条件:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
在第一个规则执行后,

REDIRECT_STATUS设置为200。因此,仅当第一个规则未首先执行时,第二个规则才会重定向,因此它将跳过/test

如果您使用的是Apache 2.4+,则可以使用END代替L来结束执行:

RewriteEngine On

RewriteRule ^/?test$ view/index.php [NC,END]

RewriteRule ^ http://google.com [R,L]

答案 1 :(得分:0)

由于内部重定向而发生这种情况,您可以使用END标志而不是L来停止此行为:

port.RtsEnable = true;
Thread.Sleep(1000); // ~1000 ms pulse width 
port.RtsEnable = false;