Php .htaccess中项目的Mod_重写规则
在我正在做的一个PHP站点中,我遇到了一些mod_重写规则的问题 我使用的是MacOSX Yosemite附带的Apache2.4.9(Unix)-Apache 我在项目的根目录中有Php .htaccess中项目的Mod_重写规则,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,在我正在做的一个PHP站点中,我遇到了一些mod_重写规则的问题 我使用的是MacOSX Yosemite附带的Apache2.4.9(Unix)-Apache 我在项目的根目录中有.htaccess文件,它被设置为在虚拟主机中运行。。。所以我联系项目的地址是http://project.local。以下是我在.htaccess中的内容: RewriteEngine On # Don't rewrite files RewriteCond %{REQUEST_FILENAME} !-f # D
.htaccess
文件,它被设置为在虚拟主机中运行。。。所以我联系项目的地址是http://project.local
。以下是我在.htaccess
中的内容:
RewriteEngine On
# Don't rewrite files
RewriteCond %{REQUEST_FILENAME} !-f
# Don't rewrite directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^pages pages.php [NC]
RewriteRule ^page/([0-9a-zA-Z]+) page.php?var=$1 [QSA]
以下是我的虚拟主机设置:
<VirtualHost *:80>
ServerAdmin me@me.com
DocumentRoot "/Users/Me/Sites/project"
ServerName project.local
ServerAlias project.local
ErrorLog "/Users/Me/Sites/logs/project_error_log"
</VirtualHost>
我可以访问
http://project.local/pages
成功,并显示上述规则中pages.php
的内容。但是当我进入http://project.local/page/testpage
,它显示的是Hello
,而不是$\u GET['var']
。我做错了什么 通过将此代码放置在.htaccess中禁用选项多视图
:
Options -MultiViews
RewriteEngine On
# Don't rewrite files
RewriteCond %{REQUEST_FILENAME} !-f
# Don't rewrite directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^pages pages.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^page/([0-9a-zA-Z]+)/?$ page.php?var=$1 [QSA,L,NC]
选项
MultiViews
由Apache的内容协商模块使用,该模块在mod_rewrite
之前运行,并使Apache服务器匹配文件扩展名。因此/file
可以在URL中,但它将提供/file.php
我通过在.htaccess
文件中添加以下行来修复此问题
Options FollowSymLinks
当转到页面/testpage
时,您会得到什么?它显示一个空白页面。如果我连接了一个Hello World
或其他东西,它会在页面上输出,因此肯定仍然会到达page.php
页面。用上面的示例更新了我的问题以澄清问题。尝试将regexp更改为^page/([0-9a-zA-Z]+)$
(注意$
)。确保您匹配所有URL。@Halcyonarray(0){}
您在浏览器中输入了什么?同时显示您的完整访问权限。我使用http://project.local/page/testpage
。我已经添加了一个解决问题的答案。感谢您的帮助,我确实在.htaccess
中添加了Options-MultiViews
,但它是否存在似乎没有什么区别。您添加的行应该是Options+FollowSymLinks
现在尝试添加Options+MultiViews
,然后检查$\u GET变量。
Options FollowSymLinks