2013-03-03 83 views
1

我跟隨.htaccess文件的代碼。該文件位於子文件夾中,可以說/ content /。的.htaccess:重寫規則問題

RewriteCond %{REQUEST_FILENAME} -s [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^([^/]+)(/([^/]+))?(/(edit)+)(/([^/]+))?/?$ edit.php?category=$1&slug=$3&edit=$5&password=$7 [L] 
    RewriteRule ^([^/]+)(/([^/]+)?/?)$ content.php?category=$1&slug=$3 [L] 

我期待上面的代碼將改寫,

  1. mydomain.com/content/text1/text2/edit/my_password到mydomain.com/content/edit.php?category=text1 &蛞蝓= text2的&密碼= MY_PASSWORD
  2. mydomain.com/content/text1/text2到mydomain.com/content/content.php?category=text1 &蛞蝓= text2的
  3. mydomain.com/content/text1到MYDOMAIN。 COM /內容/ content.php?CATEG ORY =文本1
  4. mydomain.com/content/到mydomain.com/content/content.php

上面的代碼正確地重寫,但它破壞了資產網址。 例如它將http://mydomain.com/content/js/tms.js重寫爲其他內容,對於css文件也是如此。我的資產文件夾是/ img,/ css,/ js。

如果我評論RewriteRule ^([^/]+)(/([^/]+))?(/(edit)+)(/([^/]+))?/?$ edit.php?category=$1&slug=$3&edit=$5&password=$7 [L]線它適用於資產

任何想法如何解決這一問題?

+0

是'/內容/文本1 /文本2 /編輯/ my_password'實際的文件或目錄?您的條件檢查URI是否存在的文件/目錄。 – 2013-03-03 11:47:38

+0

@Jon「content」是根目錄上的一個文件夾。其他人不是.. – user1955714 2013-03-03 11:53:57

+0

如果其他人不是真正的目錄,我不明白當它的條件是請求(如'/ content/text1/text2/edit/my_password')時,第一條規則如何工作? **必須**是現有的符號鏈接,現有文件或現有目錄。第二條規則根本就沒有條件,所以我至少可以看到有一個人在@JonLin工作 – 2013-03-03 11:57:10

回答

0

條件RewriteCond %{REQUEST_FILENAME} -d意味着「該請求是針對現有的目錄」。如果您在-d前添加!,它會將其更改爲「該請求不適用於現有目錄」。

嘗試:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)(/edit)+/([^/]+?)/?$ edit.php?category=$1&slug=$2&password=$4 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+?)/?$ content.php?category=$1&slug=$2 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+?)/?$ content.php?category=$1 [L] 
+0

哎呀!這是「!」然後..是的,這是有效的。謝謝 :) – user1955714 2013-03-03 12:31:01