如何在不影响index.php规则的情况下制作.htaccess RewriteRule

时间:2011-07-17 22:12:31

标签: .htaccess mod-rewrite

我在项目中使用GET请求,我想以一种简单的方式重写URL:如果我访问mydomain.com/test,它将在我的服务器端请求mydomain.com/get.php?txt=test

这是我的.htaccess RewriteRule,它运行正常,但问题是它也会影响我的index.php,所以如果我转到主页面它会启动:mydomain.com/get.php?txt=test请求而不是打开mydomain.com/index.php因为我的RewriteRule。

Options +FollowSymLinks
RewriteEngine On
RewriteRule (.*)$ get.php?url=$1 [L]

我不想在mydomain.com/1/test这样的路径中添加任何额外的子级别,它应该在root的下一级别。

任何帮助表示赞赏。谢谢!

3 个答案:

答案 0 :(得分:2)

最常见的方式是添加条件以仅重写不存在的资源(文件和文件夹):

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) get.php?url=$1 [L]

另一种可能的方法(适用于原始请求)可以在请求/index.php时忽略此类规则:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule (.*) get.php?url=$1 [L]

方法#1 高度推荐,非常普遍。但是.. 也许你通过get.php提供所有资源(图像/样式/ javascripts /等)(我不知道你的应用程序做了什么以及它是如何工作的)因此我提供了另一种方法。

答案 1 :(得分:0)

添加

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

在重写规则之前。

答案 2 :(得分:0)

这可以吗?

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule (.*)$ get.php?url=$1 [L]