2011-07-02 69 views
1

在我的網站的根,我有以下重定向到非WWW域名我如何獲得兩個htaccess重寫規則以「一起玩好」?

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{http_host} ^www\.notails\.com [NC] 
RewriteRule ^(.*)$ http://notails.com/$1 [R=301,NC] 

在一個名爲「攝影」我有這樣子......

RewriteEngine on 
RewriteRule ^show/([^/\.]+)/([^/]+)$ show.php?section=$1&photoid=$2 [L] 

任何內拍攝的文件夾忽略www刪除規則。我如何獲得這兩條規則這兩個適用於攝影文件夾內的文件夾/文件?

而且......我的根htaccess文件有這個...

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

</IfModule> 

# END WordPress 

難道是干擾?我有一個自我託管的WordPress博客,但它不在網站的根目錄,它在一個名爲'blog'的子文件夾中,所以我不知道爲什麼這個規則在我的根目錄的htaccess文件中。我可以/應該移動它嗎?

編輯:只要指出,萬一它不明顯 - 當我提到htaccess和mod_rewrite的東西時,我是一個完整的noob。子文件夾中的htaccess文件是否覆蓋比它更接近根的任何htaccess文件?還是htaccess的內容組合?

編輯2:我試圖移動第二規則相同htaccess文件作爲WWW刪除規則按照下面的代碼...

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

</IfModule> 

# END WordPress 

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{http_host} ^www\.notails\.com [NC] 
RewriteRule ^(.*)$ http://notails.com/$1 [R=301,NC] 
RewriteRule ^photography/show/([^/\.]+)/([^/]+)$ photography/show.php?section=$1&photoid=$2 [L] 

如果我然後去我的攝影之一它解析爲預期的網址(例如http://notails.com/photography/show/pointofayre/260),但頁面是404.

如果我手動添加'www'到它它undoes另一個規則...(http://notails.com/show.php?section=pointofayre & photoid = 260)並從中刪除'攝影/'。

回答

3

RewriteOptions inherit添加到您的「攝影」文件夾中的.htaccess中,因爲現在忽略來自父文件夾的所有重寫規則(默認行爲)。

或者從該子文件夾的.htaccess到根一個移動重寫規則(你需要通過固定的路徑稍微修改您的規則 - 添加photography/可能是不夠的,要看實際的「攝影」的位置)


UPDATE: 你的根的.htaccess可以是這樣的:

Options +FollowSymlinks 

<IfModule mod_rewrite.c> 
    # activate rewrite engine 
    RewriteEngine On 
    # we are in the root 
    RewriteBase/

    # no www please 
    RewriteCond %{HTTP_HOST} ^www\.notails\.com [NC] 
    RewriteRule ^(.*)$ http://notails.com/$1 [R=301,L,QSA] 

    # photography 
    RewriteRule ^photography/show/([^/\.]+)/([^/]+)$ /photography/show.php?section=$1&photoid=$2 [L] 

    # WordPress rules 
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
</IfModule> 
+0

我曾嘗試移動規則的根源,加入「攝影/」,但事情變得更糟。也許我做錯了,我會再試一次/弄糟它。我也會嘗試繼承規則。 – MrVimes

+0

@MrVimes移動它後顯示規則 - 也許你做錯了。這也取決於你的「攝影」文件夾有多深 - 它只是ROOT /攝影嗎?如果是這樣 - 這應該做的工作:'重寫規則^攝影/顯示/([^/\.]+)/([^/]+)$攝影/ show.php?部分= $ 1和photoid = $ 2 [L] '。無論如何 - 請記住,規則的順序很重要 - 如果你把它放在一個錯誤的地方,它可能永遠不會到達。更好地發佈您的整個.htaccess內容 – LazyOne

+0

也..攝影是直接根下面(http:// notails。com/photography) – MrVimes