2013-09-30 124 views
1

我在我的.htaccess文件中有一個代碼..它將每個.php重定向到非php。我希望它只能指導一個PHP文件,不要重定向其餘.. forexample我想abc.php是abc但bcd.php保持爲bcd.php ..我怎樣才能修改這個腳本來得到這個結果?謝謝。Apache mod_rewrite沒有重定向到PHP,但重定向到其他URL

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] 
+0

「它將每個.php重定向到非php」 - 這是一個謊言。它將非php重定向到php – user4035

回答

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}代表原HTTP請求由Apache收到,以避免循環。 %{THE_REQUEST}不會使用各種重寫規則進行重寫,這與使用用於RewriteRule的URI模式的情況相反。

+0

非常感謝你..你的代碼工作太..但我很困惑..我怎麼能理解,如果它的循環或不?有沒有辦法檢查它? –

+1

不幸的是,所有在線的.htaccess重寫都不可靠。我自己測試了其他代碼,並導致了循環。 – anubhava

0

將有例外和L標誌的規則一般重寫規則之前:

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] 
+0

這保證會導致循環。 – anubhava

+0

謝謝..它看起來像工作..你如何理解它是否會導致循環? –

+0

@EnginErdoğan它不會導致循環,導致abc不是一個PHP文件。所以第二個RewriteCond會保護你免於循環 – user4035