.htaccess重写规则指向2个不同的文件

时间:2016-04-07 20:06:25

标签: php .htaccess mod-rewrite

我有以下结构:

<div class="invitations">
 <%= form_tag assignments_path, method: :post do%>
   <div class="form-group">
    <%= label_tag 'user_id', 'Choose Freelancer' %>
    <%= collection_select(:user_id,User.all,:id,:name) %>
   </div>
 <%= submit_tag 'Assign', class: 'btn btn-primary' %>
<% end %>
<br>
</div>

其中site.com/organizer 是变量而

organizer

其中site.com/organizer/event 也是变量

当有人访问event时,我希望它指向/organizer

当有人访问organizer.php?name=$1时,我希望它指向/organizer/event

我能够做第一个或第二个,但从不在一起。他们似乎互相覆盖。

event.php?organizer=$1&event=$2

即使我在上面添加了它:

RewriteRule ^([^/]+)/(.*)$ event.php?organizer=$1&event=$2 [QSA]
RewriteRule ^([^/]+)$ organizer.php?name=$1 [QSA]

似乎所有我在单独文件夹中的CSS,JavaScript,图像等文件都不再指向正确的路径。

我如何解决这两个问题?

1 个答案:

答案 0 :(得分:0)

我能够自己解决这个问题:

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

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ event.php?organizer=$1&event=$2 [L]

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

RewriteRule ^([a-zA-Z0-9_-]+)$ organizer.php?name=$1 [L,QSA]

我必须为第二条规则再次提出条件。

同样对于要重写的文件的URL,我在调用它们时在它们前面添加了一个斜杠来修复它:

href="/css/bootstrap.min.css"

而不是

href="css/bootstrap.min.css"