2011-05-05 73 views
3

我是新的URL重写。通过输入mod重写规则,Ajax和管理请求停止工作

我已经在.htaccess文件中写了一些重写规则。我的问题是,ajax请求和管理部分(两者都由不同的文件管理,名为ajax.php和admin.php)完全不起作用。

以下是我尝试使用国防部重写来实现:

的网址:http://websitename/index.php?page=rr&cn=abc&cid=1
应该是这样的:http://websitename/rr/abc/1
在浏览器的地址栏


URL(只有“页面”值):http://websitename/index.php?page=register
应该是这样的:http://websitename/register
在浏览器的地址栏


的网址:http://websitename/index.php?page=i&in=banking&iid=12
应该是这样的:http://websitename/industry/banking/12
在浏览器的地址栏


的网址:http://websitename/index.php?page=cr&cn=pqr&rid=12
应该是这样的:http://websitename/cr/pqr/12
在浏览器的地址

到目前为止,我能够做到这一点使用下面的规则 但ajax.php和提出的要求admin.php以及一些参数根本没有工作(页面未找到错误)。

Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/([^/]+)$ index.php?page=$1&companyname=$2&companyid=$3%{QUERY_STRING} [L,QSA] 

RewriteRule ^([^/]+)$ index.php?page=$1%{QUERY_STRING} [L,QSA] 

RewriteRule ^view/([^/]+)/([^/]+)/([^/]+)$ index.php?page=$1&industryname=$2&industryid=$3%{QUERY_STRING} [L,QSA] 

RewriteRule ^([^/]*)/([^/]*)/review/([^/]*)$ /index.php?page=$1&companyname=$2&reviewid=$3 [L] 

这三个国防部重写规则,做工精细但毕竟是通过名为一个单独的文件做了Ajax请求“ajax.php”不工作(未找到页面错误来)

即以下URL应以上述工作的国防部重写规则
http://websitename/ajax.php?action=vote

http://websitename/admin.php?page=home

(不想有国防部重写规则的文件ajax.php和admin.php的)

但我无法成功地做到这一点为ajax.php和admin.php

请帮我对此。我真的坚持这一点。

谢谢

+0

你能举出一些网址的例子,以及当你不注释掉第一个时发生了什么。 – 2011-05-05 10:53:41

+0

我们需要查看网址以获得帮助。什么是CSS的网址 - 哪个URL不能正确重写。用这个信息编辑和更新问题。 – 2011-05-05 12:47:38

+0

我现在编辑了我的问题。 – 2011-05-05 13:42:00

回答

1

从它的外观看来,您的第二条重写规则会捕获您不想重写的两个URL。

RewriteRule ^([^/]+)$ index.php?page=$1%{QUERY_STRING} [L,QSA] 

这两个网址会在上面重写规则

我建议改变你的htaccess以下内容被拾起,它的所有努力做是赶上admin.php,或ajax.php调用并直接通过发送不变(我没有检查过,但它应该没问题):

Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^/ajax.php(.*)$ /ajax.php$1 [L,QSA] 
RewriteRule ^/admin.php(.*)$ /admin.php$1 [L,QSA] 

RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/([^/]+)$ index.php?page=$1&companyname=$2&companyid=$3%{QUERY_STRING} [L,QSA] 

RewriteRule ^([^/]+)$ index.php?page=$1%{QUERY_STRING} [L,QSA] 

RewriteRule ^view/([^/]+)/([^/]+)/([^/]+)$ index.php?page=$1&industryname=$2&industryid=$3%{QUERY_STRING} [L,QSA] 

RewriteRule ^([^/]*)/([^/]*)/review/([^/]*)$ /index.php?page=$1&companyname=$2&reviewid=$3 [L] 
+0

这不起作用。对ajax.php所做的ajax请求不起作用。 “页面未找到”错误。 – 2011-05-12 06:46:10

+0

也许尝试删除绝对引用,并使其相对(而不是'/ajax.php ..',更改为'ajax.php ...'),它可能会修复它并匹配您的其他规则出现的方式。您是否检查过,以确保ajax.php文件存在于被引用的位置,以及相关更改是否无效? – 2011-05-13 00:14:34

+0

这是一个解决方法/黑客,我发现时,摆脱规则。如果我按照某种顺序指定规则而不是完美地工作。即我在上面的答案的最后一行之后添加了ajax.php和admin.php规则,然后我将index.php?page = $ 1%{QUERY_STRING}规则移到了ajax.php和admin.php重写规则之下。仍然测试它的任何错误。 – 2011-05-13 07:47:22

0

一个副手的猜测,也许是ajax.php和管理员。由于领先的'/',PHP会被同化到规则2或4中。我对mod_rewrite的确切工作有些朦胧,但它可能与它有关。

尝试通过规则添加规则并测试admin.php和ajax.php页面以找出哪些规则正在使这些页面失败。

+0

感谢您的回复。最后的规则产生了问题,这就是为什么我在这里发布我的问题。如何在不破坏Ajax和管理请求的情况下让所有规则同时工作?我知道这个任务不是不可能的。 – 2011-05-11 10:51:59

-1

前缀每RewriteRule下列要求:

RewriteCond %{REQUEST_FILENAME} !-s 

有了它,当他们引用不存在的文件,你的规则才会工作。请求退出文件,特别是ajax.phpadmin.php将被逐字保留。