基于目录和子目录的htaccess重定向

时间:2014-06-26 10:37:51

标签: regex apache .htaccess mod-rewrite redirect

我有一个特殊的情况,我找不到一个好的解决方案。我已经在这里看过几十个问题/答案,但似乎没有一个能解决我的问题!

我有这样的网址: https://subdomain.domain.com/{user-name}/{app-name}/

“user-name”和“app-name”每次都可以更改,我需要将其重定向到 index.php?u={user-name}&a={app-name}

但如果网址仅为https://subdomain.domain.com/{user-name}/,我需要将其重定向到 store-list.php?u={user-name}(显示该用户所有可用应用的列表)。

我的.htaccess目前是这样的:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /store-list.php?u=$1 [L]
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?u=$1&a=$2 [L]

它在两种情况下都能完美地重定向,但每次调用“真实”文件都不起作用(例如调用我的html中的js或css文件)。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

将一个RewriteCond集应用于多个规则

是的,我们真的很接近......但RewriteCond仅适用于一条规则。是什么让我们失望。让我们使用一些棘手的逻辑并将条件反过来:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^ - [L,S=2]
RewriteRule ^([^/]+)/?$ /store-list.php?u=$1 [L]
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?u=$1&a=$2 [L]

条件是,如果文件执行存在,请保持不变,并跳过下两条规则(S=2)。