2013-03-16 15 views
2

基本上我有下面的htaccess。在一分鐘內它完美地工作,但它重定向每個文件。例如foo.php到/ foo時,我只希望它將about.php重定向到/ about。基本上我想強制.php擴展名被刪除about.php但只有該文件。只有一個文件的重寫規則

RewriteRule ^about$ about.php [L] 
RewriteCond %{REQUEST_URI} ^/about.php$ [NC] 
RewriteRule .* /about [R,L] 

現在我有上面的代碼。它現在導致了太多的重定向錯誤。

回答

1

,我已經修復它自己。

RewriteCond %{THE_REQUEST} about.php 
RewriteRule (.*)\.php$ /$1 [L,R] 
RewriteRule ^about$ about.php [L] 
+0

完美!!!!!!!!! – Bee 2017-05-30 17:16:33

0

您可以使用重定向規則來做到這一點,它非常簡單。 http://httpd.apache.org/docs/2.2/mod/mod_alias.html

編輯: 如果使用301狀態,這將導致服務器發送重定向到客戶端,這對移動站點時的SEO尤其有用。

Apache的文檔實例:

重定向/服務http://foo2.example.com/service

+0

重定向指令,在Apache文檔做你想做的,它做了301重定向。用戶在他們的瀏覽器位置結束目標地址。 – 2013-03-16 00:09:08

+0

我通常不使用查詢參數,但只是嘗試一個,它確實。看一下http://acvu.ca/2_about.html?foo=bar它重定向到我的qa站點並保留查詢參數。我剛剛使用了一個簡單的301重定向舊版本。 – 2013-03-16 00:16:39

3
RewriteRule ^about$ about.php [L] 

這是您正確的重寫,這意味着,如果它是/about.php請求​​的請求將被處理:

至於這個單獨的問題:

我不希望用戶看到about.php即使他的類型,在

,您將需要一個/about.php重定向到​​。這是你的第二個和第三個行辦(重寫規則與[R]標誌重定向)什麼,但條件是辦法廣闊,也包含了一些superfluent東西:

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

將其更改爲:

RewriteCond %{REQUEST_URI} ^/about.php$ [NC] 
RewriteRule .* /about [R,L] 

這是否保持GET參數?

如果添加[QSA]標誌(查詢字符串附加),是。

更新

由於@PeterWooster指出,重定向部分可以簡化爲:

Redirect /about.php /about 
+2

如果您需要條件和正則表達式,這很好,但是重定向指令是爲OP的用例設計的。 – 2013-03-16 00:26:31

+1

@PeterWooster你是完全正確的,我對原來的規則太偏見,現在他們已經沒有多少意義了(儘管它有效)。 – 2013-03-16 00:29:15

+0

幾分鐘前看到我的答案。我一直在使用這個SEO站點的動作。但是當你需要正則表達式時,基於重寫的版本很好。 – 2013-03-16 00:32:07