我正在为网站配置 .htaccess。
我想重写网址
http://www.example.com/search/foo/bar/baz/ ...(任意数量的子目录)
到
http://www.example.com/forms/index.php?i=foo--bar--baz-- ...
另一种选择是重定向所有网址
http://www.example.com/search/foo/bar/baz/ ...
到
http://www.example.com/forms/index.php
并让 index.php 解析 uri。
我尝试了以下 mod_rewrite 来实现上面的第二个替代方案
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ /forms/index.php
但我收到 404 错误。
注意:不确定是否重要,但这发生在 Wordpress 网站上。整个 .htaccess 是
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ /forms/index.php
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
任何帮助,将不胜感激。
谢谢。
编辑1:
我取得了一些进展。我在 RewriteRule 的末尾缺少 [L]。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ /forms/index.php [L]
作品。现在我需要在 url 中检查 /search。
编辑2:
更多进展:
RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^search/(.*)$ http://www.example.com/forms/index.php?i=$1 [QSA,L]
它似乎正在工作。将 search/ 之后的所有内容作为参数 i 传递。
现在我想仍然在地址栏中显示原始网址(不是重写的)。有什么办法吗?
谢谢