Apache mod_rewrite没有重定向到PHP,但重定向到其他URL

时间:2013-09-30 19:19:46

标签: php apache .htaccess mod-rewrite

我的.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]

2 个答案:

答案 0 :(得分: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}的URI模式的情况相反,RewriteRule不会被各种重写规则重写。

答案 1 :(得分: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]