2015-04-17 89 views
0

我有一個現有的網站與PHP中的索引的URL。我想更改網址以不包含PHP,因此thepage.php將被重寫爲http://example.com/thepagehtaccess重寫URL重定向導致循環

重寫正在工作,但當我嘗試訪問時,重定向導致'頁面無法在循環中顯示'錯誤該頁面使用page.php

我需要弄清楚如何設置重定向並重寫URL,因爲Google現在已經將PHP URL和漂亮的URL編入索引。

我看了無數網頁,但無法找到答案。

請幫忙。

這裏是我的htaccess

# The redirect below caused a loop when I access the page as 
# http://example.com/thepage.php 
# Moving the redirect after the rewrite didn't work either. 

Redirect 301 /thepage.php http://example.com/thepage 

RewriteEngine on 
# Rewrite works. The page does display corectly for this link 
# http://example.com/thepage 

<IfModule mod_rewrite.c> 
    Options +FollowSymLinks 
    Options +Indexes 
# RewriteEngine On 
    RewriteCond %{SCRIPT_FILENAME} !-d 
#RewriteRule ^photos([^\.]+)$ photos [NC,L] 
    RewriteRule ^([^\.]+)$ $1.php [NC,L] 
</IfModule> 


ErrorDocument 404 http://example.com/ 

謝謝

回答

0

你重寫規則,從它的聲音是落後的。

這裏我們捕獲所有不包含句點的php文件,並只使用沒有擴展名的名稱將它們重定向到目錄URI。 [R=301]是一個永久的301重定向,告訴誰不再在舊的地方。

RewriteEngine on 
RewriteRule ^([^\.]+).php$ $1 [NC,L,R=301] 

您可能希望只是沒了301 R來檢驗這些以確保它的工作。如果您執行的301重定向不起作用,它將被緩存到最終用戶的瀏覽器緩存中,直到它到期。

Apache有一個extensive reference on remapping URLs with redirects

+0

謝謝組合。當我這樣做,我得到404錯誤,除了主頁 \t RewriteEngine敘述上的所有網頁 \t \t選項+的FollowSymLinks \t選項+指標 \t的RewriteCond%{} SCRIPT_FILENAME!-d \t重寫規則^([^ \。] +)。PHP的$ $ 1 [NC,L,R = 301] \t \t #ErrorDocument 404 http://example.com/ – rcdev

0

我終於能夠回到這個問題,並找到解決方案。我希望這可以幫助別人。我在這個問題上撕裂了我的頭髮。

我發現很多例子,但不是我需要

#Force non-www: 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^www.example.com [NC] 
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301,NC] 

RewriteBase/

# hide .php extension 
# To externally redirect /dir/foo.php to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+).php [NC] 
RewriteRule^%1 [R,L,NC] 

# To internally redirect /dir/foo to /dir/foo.php 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule^%{REQUEST_URI}.php [L] 

ErrorDocument 404 http://example.com/