问题 如何使用mod_rewrite从.htaccess引用当前目录?


我想使用mod_rewrite制作漂亮的URL,但是只有一个版本的.htaccess文件可以用于服务器上的任何用户。

到目前为止,我有标准的漂亮网址.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$     /index.php/$1 [L]

理想情况下,我想要类似的东西

RewriteRule ^(.*)$     %{URL of this file's directory}/index.php/$1 [L]

这份文件会让我相信我想要的不是必要的:

注意:每个目录上下文中的模式匹配     永远不要忘记Pattern应用于每服务器配置文件中的完整URL。但是,在每个目录的配置文件中,每个目录前缀(对于特定目录始终相同)会自动删除以进行模式匹配,并在替换完成后自动添加。此功能对于许多种重写都是必不可少的 - 如果不这样,您将始终必须匹配父目录,这并非总是可行。

但是,我仍然得到错误的结果,无论我是否在RewriteRule上放置了index.php的前导/前面。

这个,

HTTP://服务器/测试/流/流

变成

HTTP://server/index.php/stream 

HTTP://server/test/index.php/stream 

当.htaccess文件在/ test /中时。


6660
2018-06-12 00:57


起源

也 stackoverflow.com/q/4704508/632951 - Pacerier


答案:


我遇到了类似的问题,但发现只是从根目录'/'导致我的测试网络服务器(Windows上的xampp)提供的URL类似于:

HTTP://本地主机/ C:/ XAMPP / htdocs中/网站/测试/

不完美。我的解决方案是使用RewriteCond从REQUEST_URI中提取路径。这是一个从URL末尾删除不需要的“index.php”的示例:

RewriteCond %{REQUEST_URI} ^(.*)/index.php$
RewriteRule index.php %1/ [r=301,L]

注意:百分号符号为“%1 /”,而不是美元符号。

%1-%9获取最后匹配的RewriteCond的模式,$ 1- $ 9获取RewriteRule的模式。

看到: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

干杯:)


9
2018-01-13 17:00





事实证明,无论我是否将index.php放在前面/后面都很重要。通过将其关闭,脚本可以正常工作。我一直在测试使用重定向上的物理目录的R标志。


2
2018-06-12 01:36



是, 但  离开它你依赖于rewritebase的价值, 哪一个 不得 是你的htaccess父文件夹。在任何情况下,离开它是一个hackish解决方案,而不是一个真正的解决方案。 - Pacerier