我有这个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文件。 它工作得很好,但我想添加新东西。
代码应该与...一样 http://mypage.com/contact 和 http://mypage.com/contact/(尾随斜线)
我希望能够使用更深层的URL,但将它们一起发送到php http://mypage.com/contact/me 我想index.php,在这种情况下,接收这个变量“contact / me”,后来我将它分离到一个数组并使用它。
另外我的小问题是,如果我执行此子URL(缺少更好的单词),我的CSS路径会被弄乱,因为页面认为它在联系人文件夹中。它可以修复吗?
答案 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基数应该是什么)。