我想使用mod_rewrite制作漂亮的网址,但只有一个版本的.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://server/test/stream/stream
变成
http://server/index.php/stream
不
http://server/test/index.php/stream
当.htaccess文件位于/ test /.
时答案 0 :(得分:10)
我遇到了类似的问题,但发现只是从根目录'/'导致我的测试网络服务器(Windows上的xampp)提供类似于以下网址的URL:
不完美。我的解决方案是使用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
干杯:)
答案 1 :(得分:3)
事实证明,无论我是否将index.php放在前面/后面都很重要。通过将其关闭,脚本可以正常工作。我一直在测试使用重定向上的物理目录的R标志。