2014-11-04 133 views
1

我有一個htaccess文件設置並運行在一個活的服務器上。一切都運行良好,但我必須添加一些特定的URL重定向到它。具體的重定向已經在IIS web.config文件中設置。一個例子:URL重定向在htaccess

<rule name="URL re-direct" stopProcessing="true"> 
    <match url="^program_consumer((\.cfm)|(\.php)|()+)((\?.*)|())$" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> 
    <action type="Redirect" url="site_programs{R:7}" /> 
</rule> 

我很難把這個翻譯成mt htaccess文件。我已經試過:

AddDefaultCharset OFF 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

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

# Re-direct Non-file Non-directories 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^([program_consumer]+)((\.cfm)|(\.php)|()+)((\?.*)|())$ http://{HTTP_HOST}/site_programs$1 [L,R=301] 

顯然,program_consumer不是根文檔目錄的任何地方存在的文件,但site_programs確實存在,並擔任一個擴展名的PHP文件。有什麼想法,我失蹤了?

回答

0

你在RewriteRule正則表達式似乎出現故障,它需要內部重寫規則之前放置:

AddDefaultCharset OFF 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteRule ^(program_consumer\.(?:cfm|php))$ /site_programs/$1 [L,R=301,NC,NE] 

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

這句法重寫規則拋出500錯誤。我甚至無法加載主頁。 – 2014-11-04 22:19:00

+0

對不起,第一條規則中有一個額外的括號。現在是固定的,再試一次。 – anubhava 2014-11-05 04:08:41