如何使用mod_rewrite作为一个参数在域地址后用斜杠捕获所有字符?

时间:2011-07-05 23:37:04

标签: apache mod-rewrite

如何使用mod_rewrite将域名后的所有字符作为一个参数捕获? 我有脚本加载其他页面内容并显示像标准页面。 示例脚本地址如下所示:

example.com/script.php/?www='/some/paths/etc'

我想将该网址掩盖为如下所示:

example.com/some/paths/etc

如果没有路径,它应该看起来像

example.com/

可以有不同数量的网址部分(a / b / c /.../ X /)

我对mod_proxy感兴趣,但我只能用.htaccess这样做,所以它不能解决我的问题。 我不能将一个地址重定向到另一个地址,它们必须分开。

1 个答案:

答案 0 :(得分:2)

您可以通过mod_rewrite 代理(只要mod_proxy已编译到服务器中),这可以通过.htaccess文件完成。请注意,RewriteEngine On要求{。1}}可以在.htaccess中覆盖。

.htaccess文件中的以下内容:

Options FollowSymLinks

Options FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_URI} ^/script.php/?www= RewriteRule ^/script.php/?www='([^']+)' http://example.com/$1 RewriteRule ^/(.*) /script.php/?www='$1' [P] 将您的脚本路径与?www =参数匹配(如果匹配不匹配,则不会进行重写)。第一个RewriteCond将匹配www =参数并重写请求的可见路径。第二个RewriteRule然后代理请求(由于 [P] 标志)到脚本并将获得“内容”。

注意:这尚未经过测试,但希望能让您朝着正确的方向前进,以解决问题。此外,如果script.php需要可选的参数RewriteRule,您可能需要调整&var2=whatever以匹配它并使用括号存储它。然后,您可以使用%1调用这些参数。有关详情,请参阅documentation

另外,为了帮助您调试重写,您可以使用:

RewriteCond

编辑:添加了RewriteLog /full/path/to/your/log/file RewriteLogLevel 3 内容,澄清了顶部的代码段将放入.htaccess文件中