2009-04-25 104 views
1

我想重定向页面使用mod_rewrite到一些变量的页面(使用它们的PHP的$_GET)。国防部重写和PHP

举个例子用几行:

  • 当用户进入/c/stg它重定向到item_show.php?id=$1&f=1(其中f是页号)。
  • 当用户输入/c/stg/2时,它会重定向到show.php?id=$1&f=$2的第二页。

我觉得有没有这些错误或误用在我的文件,但在这里就是我想:

我想用户输入/string直接去item_show.php?id=$1&f=1$1是我们当然...

但是,当我通过从RewriteRule中删除/c/部分来更改我的文件时,它开始在所有其他目录中发出错误,并且不会读取任何文件(my.css),即使我已经定义了RewriteCond %{REQUEST_FILENAME} !-f ...

你有什么建议吗? 或者我怎样才能用任何方法使这个系统成为可能?

Options FollowSymLinks 
RewriteEngine On 

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

#user 
RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC] 

#marked 
RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC] 

#content 
RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC] 
RewriteRule ^c/([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC] 
+0

的第一个建议:张贴在它这些规则的文件的内容。它是主要的服务器配置还是.htaccess文件? – 2009-04-25 03:40:41

+0

当前.htaccess文件是在这里:! 有FollowSymLinks RewriteEngine叙述 在 的RewriteCond%{} REQUEST_FILENAME -f 的RewriteCond%{} REQUEST_FILENAME -d #user 重写规则^ U /([^ /] +) /?$ profile.php?username = $ 1 [L,NC] #marked RewriteRule^marked /([^ /] +)/?$ item_marked.php?id = $ 1 [L,NC] #content RewriteRule^c /([^ /] +)/?$ item_show.php?[L,NC] RewriteRule^c /([^ /] +)/([^ /] +)/?$ item_show.php?id = $ 1&f = $ 2 [L,NC] – jnbn 2009-04-25 03:53:21

回答

1

我错了,如果RewriteCond只传递到第一个RewriteRule?

试试这个:

Options FollowSymLinks 
RewriteEngine On 

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

#user 
RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
#marked 
RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
#content 
RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC] 

干杯,

1

RewriteCond指令就只属于先上后下RewriteRule指令。所以在你的情况下,两个RewriteCond方向仅适用于第一个RewriteRule指令而不适用于其他指令。

但是你可以使用这个流产的规则退出重写过程中,如果请求可以被映射到一个现有的文件或目录:

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

这将导致,如果该请求不能被下面的规则只测试直接映射到现有文件或目录。