mod_rewrite使用多个模式制作干净的URL

时间:2013-06-26 19:56:01

标签: php apache mod-rewrite clean-urls

我正在尝试为我的应用程序创建干净的URL。所以我在 .htaccess 文件中编写了以下代码。

RewriteEngine On
Options +FollowSymLinks

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

RewriteRule ^(.*)/(.*)/?$ index.php?p=$1&id=$2 [NC,L]
RewriteRule ^(.*)/?$ index.php?p=$1 [NC,L]

如您所见,查询字符串中最多可包含2个变量; p id 。如果我在.htaccess文件中只有一个规则(带有1个变量的规则),一切都会好的。但是当我添加第一条规则(带有2个变量的规则)时,似乎所有的css,js和图像文件都会消失。
我用这种方式写了css,images和js文件:

  

./目录名/ FILE_NAME

请帮我制作包含多个规则的干净网址。

2 个答案:

答案 0 :(得分:0)

将您的代码更改为:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

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

RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?p=$1&id=$2 [QSA,L]

RewriteRule ^([^/]+)/?$ /index.php?p=$1 [QSA,L]

答案 1 :(得分:0)

如果您关注Front-Controller Pattern,(即所有内容都经过index.php),我们建议您使用FallbackResource

FallbackResource /index.php

它比mod_rewrite等效物更简洁和高效(如 anubhava的答案中所见):