htaccess重写使用带斜杠的变量

时间:2013-07-05 20:52:28

标签: apache .htaccess mod-rewrite url-rewriting

我有这个htaccess代码:

<IfModule mod_rewrite.c>
Options +FollowSymlinks
Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)/?$ index.php?p=$1 [NC,L]
</IfModule>

我有索引文件,其中我根据p值包含特定的php文件。 它工作得很好,但我想添加新东西。

  1. 代码应该与...一样 http://mypage.com/contacthttp://mypage.com/contact/(尾随斜线)

  2. 我希望能够使用更深层的URL,但将它们一起发送到php http://mypage.com/contact/me 我想index.php,在这种情况下,接收这个变量“contact / me”,后来我将它分离到一个数组并使用它。

  3. 另外我的小问题是,如果我执行此子URL(缺少更好的单词),我的CSS路径会被弄乱,因为页面认为它在联系人文件夹中。它可以修复吗?

1 个答案:

答案 0 :(得分:1)

现在,您的尾部斜线被[^.]+表达式吞噬,因此您需要在?之后添加+来使其变得非贪婪。否则,在URI中使用多个斜杠应该使用这些规则。所以这个:

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

需要这样:

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

就css而言,您需要更改css链接,以便它们是绝对URL路径(它们以/开头并从文档根开始,例如/css/my.css)或者您可以尝试在页面标题中添加相对URL基础:

<base href="/">

(或者URL基数应该是什么)。