好的,我有一个网站需要有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
你能不这样做?如果是这样,有人可以帮助我吗?
答案 0 :(得分:3)
1.A。 DirectoryIndex
DirectoryIndex newform.php index.php index.html
优点:
缺点:
1.B。 RedirectMatch
RedirectMatch ^/$ /newform.php
优点:
缺点:
1.C。 RewriteRule
RewriteRule ^/$ /newform.php [R,L]
优点:
缺点:
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;)决定是你的;)