htaccess文件需要两个RewriteRules

时间:2012-03-27 22:04:33

标签: .htaccess

好的,我有一个网站需要有2个RewriteRules。

首先,如果你去newvendor.business.com,它将转到newvendor.business.com/newform.php

当我点击带有该ID的链接时,我需要它从newvendor.business.com/pending转到newvendor.business.com/pending/index.php。这是htaccess文件,适用于第一个规则,但不适用于第一个规则。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z_]+)/?([a-zA-Z_+]+)?/?([0-9]+)?/? $1.php?action=$2&id=$3 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-p
RewriteRule ^pending/([0-9]*)$ /pending/index.php?id=$1

你能不这样做?如果是这样,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

1。关于newform.php的一点:

1.A。 DirectoryIndex

DirectoryIndex newform.php index.php index.html

优点:

  • URI实际上保留“/”,而不是“/newform.php”。

缺点:

  • 也许您希望用户看到“/newform.php”
  • 小心在子文件夹中的任何位置使用newform.php - 继承了DirectoryIndex设置,最终可能会出现意外结果(尽管这是非常糟糕的场景)。

1.B。 RedirectMatch

RedirectMatch ^/$ /newform.php

优点:

  • 精确 - 仅重定向此特定URI(子文件夹不受影响)。

缺点:

  • 目前我无法想到

1.C。 RewriteRule

RewriteRule ^/$ /newform.php [R,L]

优点:

  • 嗯..用mod_rewrite让我成为一个三明治?

缺点:

  • 调用mod_rewrite不是一个非常轻松的操作,但如果你要将mod_rewrite用于其他规则则无关紧要......

2。其余的......

2.1。使用mod_rewrite

RewriteEngine On

RewriteRule ^pending/([0-9]+)$ pending/index.php?id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z_]+)/?([a-zA-Z_+]+)?/?([0-9]+)?/? $1.php?action=$2&id=$3 [L,QSA]

基本上,我改变了规则顺序,因为你的“第一个”匹配挂起/ [0-9] + $,并且控制从未超过该点。

2.2。利用MultiViews

虽然这不是纯粹的配置解决方案(需要对php文件进行一些更改),但这可能会让你避免使用mod_rewrite ......

因此,为了做到这一点,您需要启用MultiViews选项:

Options +MultiViews

然后你只需要构建一个像“/ article / 123 / edit”这样的“漂亮”的URL,如果有一个名为 article.php 的文件,它将被调用,尽管你没有提到.php扩展名 然后, article.php 文件可以抓取$_SERVER["REQUEST_URI"]并按照它认为合适的方式解析...

对于待处理/ * - 可以在此方案的待处理文件夹中使用ErrorDocument

ErrorDocument 404 index.php

然后还要检查$_SERVER["REQUEST_URI"]

所以,你有它...有和没有mod_rewrite;)决定是你的;)