.htaccess将动态网址片段添加到现有的重写规则中

时间:2011-03-16 09:27:29

标签: php .htaccess

所以我有这个规则

# Rewrite for account view
RewriteRule ^([^/]+)/([^/]+)/?$ account.php?type=$1&user=$2 [NC,L]

转换为http://www.site.com/user/s2xi

但现在我希望通过网址获得更多创意,并为其添加主题位置:

http://www.site.com/user/s2xi/theme/slate/

这样我就可以访问我只需要输入

的主题的CSS文件
http://www.site.com/user/s2xi/theme/slate/css/slate.css

如何修改或添加另一个RewriteRule以获得我想要的结果?

另外,我如何能够在PHP代码中使用新网址应用和访问我的主题文件?

我当前的主题路径为library/themes/users/slate,子文件夹为/css/js

我的尝试:

# Rewrite for user theme location
RewriteRule ^([^/]+)/([^/]+)/theme/([^/]+)/?$ account.php?type=$1&user=$2$theme=$3 [NC,L]

2 个答案:

答案 0 :(得分:3)

我建议将所有请求重定向到一个文件,例如index.php然后使用$_SERVER['REQUEST_URI']获取网址。然后,您可以使用此数据,例如将其爆炸。然后,您将能够动态确定将加载哪个页面。

您可以使用以下代码将所有请求重定向到index.php

RewriteEngine on

RewriteRule .* index.php


您还可以排除将特定文件类型重定向到此PHP文件。例如CSS,JavaScript等静态内容。例如,以下代码将排除所有带有CSS,JS,PNG或JPG扩展名的文件:

RewriteEngine on

RewriteRule !\.(css|js|png|jpg)$ index.php


要排除所有存在的文件,可以使用以下代码:

RewriteEngine on

RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule .* index.php

答案 1 :(得分:1)

您可以将其余路径放入第三个参数:

RewriteRule ^([^/]+)/([^/]+)/?(.*)$ account.php?type=$1&user=$2&rest_of_the_url=$3 [NC,L]

[编辑]

好的,对于你的情况,我认为你应该写.htaccess重定向所以对于css和js文件apache直接转到它们。因为php处理是不必要的开销,除非你想检查用户凭证或类似的东西。

RewriteRule ^([^/]+)/([^/]+)/theme/([^/]+)/(.+\.(?:css|js|png|jpg))$ /library/themes/users/$3/$4 [NC,L]