0

如果我使用 htaccess 代码:

RewriteRule ^test/(.*)/?$ /taxis/index.php?location=$1 [L,QSA,NC,R]

并导航到链接:

http://test.co.uk/test/abcde

htaccess 工作并将我转移到: http ://test.co.uk/taxis/index.php?location=abcde

但是,我想更改重写规则,使其适用于同一目录:

^taxis/(.*)/?$ /taxis/index.php?location=$1 [L,QSA,NC,R]

但是当我导航到链接时:

http://test.co.uk/taxis/abcde

该链接不起作用并产生:

http://test.co.uk/taxis/index.php?location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=index.php&location=abcde

你知道我可以如何调整这个给我:

http://test.co.uk/taxis/index.php?location=abcde

4

1 回答 1

1

您需要重写规则之前的条件,告诉它如果 URI 已经指向资源,则不要重写,或者只是排除规则的目标。重写引擎不断循环遍历所有规则,直到 URI 停止更改。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^taxis/(.*)/?$ /taxis/index.php?location=$1 [L,QSA,NC,R]

含义:“如果请求不是现有文件,并且请求不是现有目录,则应用规则”

或者排除规则的目标:

RewriteCond %{REQUEST_URI} !^/taxis/index\.php$
RewriteRule ^taxis/(.*)/?$ /taxis/index.php?location=$1 [L,QSA,NC,R]
于 2013-04-23T19:10:02.340 回答