2013-03-03 105 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