.htaccess重写网址并获取变量

时间:2013-03-27 10:00:42

标签: php .htaccess

我使用以下.htaccess代码强制www加入我的网站域名。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

现在我想改变我的网址:

www.mysite.com/index.php?i=something

www.mysite.com/something

但我仍然希望有能力去

www.mysite.com/admin.php(例如)作为单独的页面。

我尝试将此代码RewriteRule ^(.*)$ index.php?i=$1 [NC]添加到我的.htaccess文件中,但是当我在/之后键入任何内容时,它将被视为get变量。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

你可以在根目录下的一个.htaccess文件中尝试这样的东西。

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !index\.php  [NC]
RewriteCond %{REQUEST_URI} !admin\.php  [NC]
RewriteRule ^(.+)/?  /index.php?i=$1    [L,NC]

如果admin.php可以是任何文件,只需替换

即可
RewriteCond %{REQUEST_URI} !admin\.php  [NC]

RewriteCond %{REQUEST_FILENAME} !-f

要重定向到404错误处理程序脚本,请添加一行,如下所示:

ErrorDocument 404 /path/404.php

这只是一个例子,相应地进行修改。

答案 1 :(得分:1)

试试这个: -

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

答案 2 :(得分:0)

试试这个......

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)/$ /index.php?i=$1 [L]  // www.mysite.com/something/

RewriteRule ^(.*)$ /index.php?i=$1 [L]  // www.mysite.com/something

答案 3 :(得分:0)

你必须添加这样的expiation,它必须在你的RewriteRule S=1之后的Skip RewriteRule之前,请参阅此页面以获取有关此标志的更多信息http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriteflags

RewriteCond %{REQUEST_URI} ^(.*)/admin\.php$ [NC,OR]
RewriteRule ^ admin.php [S=1,L] 
RewriteRule ^(.*)/$ /index.php?i=$1 [NC]