1

在提出这个问题后,Htaccess URLRewrite to another map 效果很好,但现在我想添加一个额外的“地图”,但这不起作用。

我现在的 .htaccess 文件:

ErrorDocument 404 /v2/404.php
ErrorDocument 404 /v2/505.php

RewriteEngine on

RewriteRule ^error/([^/]+)/?$ error.php?id=$1 [L,QSA,NC]

RewriteRule ^email/([^/]+)/?$ email.php?id=$1 [L,QSA,NC]

RewriteRule ^activate/([^/]+)/?$ activate.php?code=$1 [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^werknemer/([^/]+)/?$ werknemer/$1.php [L,QSA,NC]

RewriteRule ^klanten/([^/]+)/?$ klanten/$1.php [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME}.php -f

RewriteRule ^(.*)$ $1.php [L]

总是最后一个不起作用,现在 RewriteRule ^klanten/ 不起作用,当我在 RewriteRule ^klanten/ 之后执行 RewriteRule ^werknemer/ 时,RewriteRule ^klanten/ 起作用,但 RewriteRule ^werknemer/ 不起作用。

如何解决这个问题?

谢谢!沃特0100

4

1 回答 1

3

您需要再次复制 2 个条件。RewriteCond's 仅适用于紧随其后的RewriteRule,因此如果要将它们应用于多个规则,则需要复制条件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^werknemer/([^/]+)/?$ werknemer/$1.php [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^klanten/([^/]+)/?$ klanten/$1.php [L,QSA,NC]

也许您的最后一条规则也需要它:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]

这将检查是否存在尾部斜杠,并在查看是否将其添加php到末尾产生现有文件之前将其删除。

于 2012-09-24T20:56:46.987 回答