将外部.php请求重新定向到无扩展名的URL

将外部.php请求重新定向到无扩展名的URL,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我管理几个以前用ColdFusion编写但现在用PHP编写的站点。我的HTACCESS文件针对这些站点的目标如下: 始终将裸域解析为www.domain.com 只要文件存在,就将任何外部.CFM文件重新定向到.PHP 将所有.PHP请求作为无扩展URL提供,包括或不包括查询字符串 在大多数情况下,我的HTACCESS规则是有效的。我遇到的唯一问题是搜索引擎中的external.php请求没有解析为无扩展名的URL。以下是HTACCESS文件: #Main Page DirectoryIndex

我管理几个以前用ColdFusion编写但现在用PHP编写的站点。我的HTACCESS文件针对这些站点的目标如下:

始终将裸域解析为www.domain.com 只要文件存在,就将任何外部.CFM文件重新定向到.PHP 将所有.PHP请求作为无扩展URL提供,包括或不包括查询字符串 在大多数情况下,我的HTACCESS规则是有效的。我遇到的唯一问题是搜索引擎中的external.php请求没有解析为无扩展名的URL。以下是HTACCESS文件:

#Main Page
DirectoryIndex index.php
AddDefaultCharset OFF
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# Never Use the naked domain
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]

# Never Use the naked domain and Remove PHP extension
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RedirectMatch 301 /([A-Za-z0-9_\-]+)\.cfm((\?.*)|())$ http://www.domain.com/$1$2
RewriteRule ^([A-Za-z0-9_\-]+)((\?.*)|())$ http://www.domain.com/$1.php$2 [L]

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

我处理的大多数站点都没有SSL或HTTPS请求。正如我所提到的,除了将.php请求解析为无扩展名的URL之外,这些规则都有效。此外,我的HTACCESS文件放在我的web根目录中。提前感谢您的帮助。

这组指令:

# Never Use the naked domain and Remove PHP extension
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RedirectMatch 301 /([A-Za-z0-9_\-]+)\.cfm((\?.*)|())$ http://www.domain.com/$1$2
RewriteRule ^([A-Za-z0-9_\-]+)((\?.*)|())$ http://www.domain.com/$1.php$2 [L]
有一些问题。重写条件不适用于重定向匹配,它甚至不是mod_rewrite的一部分。它是mod_别名的一部分,应用于请求处理管道的不同部分。 它可能看起来像:

RewriteRule ^(.*)\.(cfm|php)$ /$1 [L,R=301] 

您不需要根据HTTP_主机的条件进行筛选

保持.htaccess如下:

#Main Page
DirectoryIndex index.php
AddDefaultCharset OFF
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# Never Use the naked domain
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301,NE]

# Never Use the naked domain and Remove PHP extension
RewriteCond %{THE_REQUEST} \.(php|cfm)[\s?] [NC]
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)\.(cfm|php)$ /$1 [R=301,L,NE]

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]

那么,我应该使用_请求进行重写吗?