我在项目中使用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的下一级别。
任何帮助表示赞赏。谢谢!
答案 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]