我尝试使用.htaccess中的以下代码将http://domain.com/user/foobar
重定向到http://domain.com/user/index.php?id=foobar
:
RewriteEngine On
RewriteBase /data
RewriteRule ^user/(.*)$ user/index.php?id=$1
但由于某些原因,只有 index.php (不是 foobar )作为ID返回给脚本。
我认为mod_rewrite因为现有的文件夹名称也与正则表达式模式匹配而感到困惑。但是,在将文件夹重命名为_user
并相应地修改上述代码后,它可以正常工作。
答案 0 :(得分:3)
请注意多次应用.htaccess
中的重写规则:
0: http://domain.com/data/user/foobar
1: /data/user/foobar -> /data/user/index.php?id=foobar
2: /data/user/index.php?id=foobar -> /data/user/index.php?id=index.php
因此,它始终会将id
参数替换为index.php
。
您需要write a condition如果已经请求index.php
,则不会重写,例如通过检查文件是否已存在:
RewriteEngine On
RewriteBase /data
# the following condition applies to the next rule
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^user/(.*)$ user/index.php?id=$
答案 1 :(得分:1)
尝试
RewriteEngine On
RewriteBase /data
#if not index.php
RewriteCond %{REQUEST_URI} !index\.php$ [NC]
RewriteRule ^user/(.*)$ user/index.php?id=$1 [L]