2013-07-05 86 views
2

我有此htaccess的代码: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. 我希望能够用更深入的网址,但一起送他们到PHP http://mypage.com/contact/me 我会像index.php,在这种情况下,接收这个变量“contact/me”,后来我将它分离到一个数组中并像这样工作。

而且我的小问题是,如果我这样做子网址(与缺乏一个更好的词),我的CSS路径搞砸的页面认为这是在联系人文件夹。它是可修复的吗?

回答

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的基础应该是)。