我想让我的网址漂亮。
example.com/en/directions.php
example.com/en/directions/
两者都应重写为
example.com/en/directions
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
</IfModule>
这当前在example.com/en/directions/
上生成500错误,并将.php保留为example.com/en/directions.php
。
奖励积分。它是否遵循如果这些条件中的任何一个符合,那么执行此操作。那么-d
和-f
呢,他们在做什么?
答案 0 :(得分:0)
针对-f
的检查因尾部斜杠而失败,因此您需要对其进行额外检查,而不使用可能的尾部斜杠:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*?)/?$ $1.php
</IfModule>
重写条件和重写规则的工作原理。如果这些条件中的任何一个匹配,它会遵循这样做。那么-d和-f呢,他们在做什么?
规则之前的任意数量的条件仅适用于该规则,并且它们都需要匹配。如果您想要一个条件或另一个条件,那么您可以在条件结束时包含[OR]
标志:
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_FILENAME} !-f
对于-f
和-d
,它们是资源检查,以查看给定路径是指向文件还是目录。有关完整说明,请参阅apache's mod_rewrite docs。