.htaccess RewriteRule将目录类型的URL结构转换为查询

时间:2010-11-12 20:04:51

标签: url .htaccess mod-rewrite seo

我知道这个问题已经被多次询问/回答,但我似乎无法超越它。所以,我道歉......

在网站开发阶段,我希望浏览器地址栏显示:domain.com/dev/item

我希望RewriteRule将其更改为:domain.com/dev/index.php?p=item

我正在使用位于public_html目录中的.htaccess。 public_html / dev中的.htaccess,运行正常,配置为将未使用我的ip的所有人重定向到domain.com。我的apache版本是2.2.15,我已经确认我能够使用.htaccess重定向,但顶级.htacess根本不起作用。这是我使用的代码:

Options +FollowSymlinks
RewriteEngine On
RewriteRule ^dev/(.*)$ dev/index.php?p=$1 [NC]
#variations tried: ^dev/(.*)+$, ^dev/(.*)+?$

包括变体在内,会导致404,/ dev / item未找到。删除dev / from ^ dev /(.*)$会产生正确的url格式,但是以下服务器变量:

[REDIRECT_QUERY_STRING] => p=
[REDIRECT_URL] => /404.shtml
[QUERY_STRING] => p=
[REQUEST_URI] => /dev/item

我的目标是进行一些小改动,以支持实时网站和开发副本的这种重写。但我只是不明白我做错了什么。我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:2)

您需要在重写路径的开头指定/。

请改为尝试:

RewriteEngine on
RewriteBase /

# If request is for a file that does actually exist, don't rewrite.
RewriteCond %{REQUEST_FILENAME} !-f
 # If request is for a directory that does actually exist, don't rewrite.
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^/dev/(.*)$ /dev/index.php?p=$1 [NC]