2014-10-19 60 views
1

感謝您的幫助,我可以創建一個.htaccess,將動態鏈接重寫爲靜態鏈接。現在我想將該解決方案擴展到整個站點,以便根據$ _get變量加載準確的模塊。然後感謝.htaccess我應該能夠做出友善的鏈接。唯一的問題是...它不工作...它顯示我一個錯誤:使用htaccess創建seo友好鏈接時出現403錯誤

403禁止 您沒有權限訪問此文檔。

我使用這個腳本重寫鏈接:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase /mod1/ 

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} \s/mod1/index.php\?module=([^\s&]+) [NC] 
RewriteRule^/mod1/%1? [R=302,L] 

# internal forward from pretty URL to actual one 
RewriteRule ^mod1/([^\s&]+)?$ mod1/index.php?module=$1 [L,QSA] 

現在我使用的文件夾MOD1但通常我想有就有一個域名,以便它具有:

www.domain.com/index.php?module=create_list

被重定向到:

www.domain.com/create_list

我在網上發現了一個信息,我應該將目標文件(這是我的例子中的索引)的權限更改爲755,但在我的情況下不起作用。 該腳本的另一個祕密是第一部分似乎工作,但我不知道爲什麼它總是在最後給出url「/」,即使我沒有在規則中定義它。

任何幫助表示讚賞。

編輯:

我設法解決與商場更改腳本問題:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 

RewriteBase /mod1/ 

#RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteCond %{REQUEST_FILENAME} !-d 

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} \s/mod1/index.php\?module=([^\s&]+) [NC] 
RewriteRule^%1.html? [R=302,L] 

# internal forward from pretty URL to actual one 
RewriteRule ^([^/]+).html?$ index.php?module=$1 [L,QSA] 

據工作poperly。但我仍然不明白幾件事情。首先,如果我從刪除#:

#RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteCond %{REQUEST_FILENAME} !-d 

的[L,QSA]起作用但permament [R = 302,L]不,我明白,這兩個線是用於與該PHP中使用的文件文件,他們解決了路徑問題。但是,如何讓他們一起工作,永久重定向302?

第二件事是我需要在靜態鏈接的末尾添加.html,這不是我計劃的一部分。是否有可能使它沒有.html擴展名的工作?

回答

-1

如果你想有一個以上的變量來自搜索引擎的網址傳回給你的index.php,你可以這樣做:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^([^/]+)$ index.php?module=$1 
RewriteRule ^([^/]+)/([^/]+)$ index.php?module=$1&var2=$2 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?module=$1&var2=$2&var3=$3 

確保把那個.htaccess文件在你的MOD1 /目錄並刪除舊的。

如果您訪問/mod1/search,請求將以index.php?module=search結束。

/mod1/search/Books =>index.php?module=search&var2=Books

mod1/search/Books/20 =>index.php?module=search&var2=Books&var3=20

我看不出任何一點,你爲什麼會重定向到/mod1/index.php?module=something因爲/mod1/something這將導致無休止的

  1. 用戶發送/mod1/index.php?module=something =>服務器將其重定向到/mod1/something
  2. 用戶發送/mod1/something =>服務器重定向到/mod1/index.php?module=something

等等......更何況,你會從來看搜索引擎的點結束複製的內容。

編輯1: 如果你想尾隨斜線可選,只是追加/?在重寫規則的末尾:

RewriteRule ^([^/]+)/?$ index.php?module=$1 
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?module=$1&var2=$2 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?module=$1&var2=$2&var3=$3 
+0

嘿,謝謝你的答案,但遺憾的是它並沒有解決我的問題,因爲現在它不重寫的URL。另外我有一個url ..mod1/index.php?module = create_list,但它不顯示正確的內容。這似乎是PHP不接收GET變量。 – user1857756 2014-10-19 20:59:02

+0

我剛剛編輯了我的答案。爲什麼你需要將/mod1/index.php?module = something'重定向到'/ mod1/something'? – 2014-10-20 05:57:07

+0

我想將動態鏈接重定向到靜態以避免重複的內容,以防有人使用這種方式訪問​​它 - 至少這是我的假設。這是錯的嗎?我用你的代碼,不幸的是,它仍然沒有解決問題仍然鏈接:[鏈接](/ MOD1 /東西)給我403錯誤 - 「禁止 - 你沒有權限訪問這個文件」(我已經把它在文件夾mod1中)。是否有可能在index.php中包含來自不同文件夾的文件中的錯誤與php相關?因爲我想出了爲什麼這個「簡單」重定向不起作用的想法... – user1857756 2014-10-20 16:06:57