我想使用一些RewriteRule
来转换:
http://example.com/blah => index.php?id=blah
http://example.com/someone/blah => index.php?id=blah&user=someone
以下是htaccess
:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?id=$1 [L]
RewriteRule ^(.*)/(.*)$ /index.php?id=$2&user=$1 [L]
</IfModule>
但似乎最后两条规则不兼容:使用此htaccess
,我得到一些500 Internal Server Error
。
如何创建两个规则,使它们不会重叠&#34;彼此?
注意:
这两条规则中的每条规则都可以单独使用
当我使用第二条规则时,http://example.com/someone/blah =&gt; index.php?id=blah&user=someone
有效,但似乎根文件夹不再是/
而是/someone/
,然后找不到CSS ...如何防止在这种情况下更改基本文件夹?
答案 0 :(得分:2)
您有4个问题:
(.*)
会将任何内容转换为/index.php?id=$1
500 internal server error
的无限循环。domain.com/anything/anything
要解决重定向问题,您可以使用:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ /index.php?id=$2&user=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ /index.php?id=$1 [L]
</IfModule>
由于我已经将正则表达式更改为([^/]+)
,这意味着什么不是/
),因此它会捕获您想要的数据,并且在此方案中顺序无关紧要,因为它将特别匹配:
domain.com/anything
并且
domain.com/anything/anything
要修复CSS和图片,您可以使用base
TAG在HTML中定义绝对网址:
<base href="http://domain.com/">