1

我的 .htaccess 文件中有一个代码。它将每个 .php 重定向到非 php。我希望它只指向一个 php 文件而不重定向其余文件。例如,我希望 abc.php 为 abc 但 bcd.php 保持为 bcd.php .. 如何修改此脚本以获得此结果?谢谢。

RewriteEngine on
#Redirect non-php to php and stop futher processing
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

#redirect .php to non-php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)\.php$ $1 [R=301,L]
4

2 回答 2

2

此代码应该适合您:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(abc)\.php[?\s] [NC]
RewriteRule ^ %1 [R=301,L]

#Redirect non-php to php and stop futher processing
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

在此处使用%{THE_REQUEST}表示 Apache 接收到的原始 HTTP 请求以避免循环很重要。%{THE_REQUEST}与用于RewriteRule.

于 2013-09-30T19:37:45.740 回答
0

将带有异常和 L 标志的规则放在通用 RewriteRule 之前:

RewriteEngine on
#redirect abc.php to abc
RewriteRule ^abc\.php$ abc [R=301,L]

#Redirect non-php to php and stop futher processing
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{REQUEST_URI} ! abc$
RewriteRule ^(.*)$ $1.php [L]
于 2013-09-30T19:25:33.410 回答