在我的生产服务器上,事情没有问题:在我的.htaccess
文件中,PHP扩展删除和尾部的斜杠规则已经就位。
但在当地,这是行不通的(好,部分,无论如何)。 我正在运行Apache2虚拟主机的网站。 在这种情况下,我决定不使用.htaccess
文件,而只是将规则添加到httpd-vhosts.conf
文件中,我听说如果可能在服务器上,这是更好的方法。
虚拟主机正在工作,我用于我的网站的URL是这样的:
devserver:9090
这是我的httpd-vhosts.conf
文件:
NameVirtualHost *:9090 # for stuff other than this site <VirtualHost *:9090> ServerAdmin admin@localhost DocumentRoot "/opt/lampstack/apache2/htdocs" ServerName localhost </VirtualHost> # for site in question <VirtualHost *:9090> ServerAdmin admin@localhost DocumentRoot "/opt/lampstack/apache2/htdocs/devserver" ServerName devserver <Directory "/opt/lampstack/apache2/htdocs/devserver"> Options Indexes FollowSymLinks Includes AllowOverride None Order allow,deny Allow from all </Directory> <IfModule rewrite_module> RewriteEngine ON RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule (.*)/$ /$1.php </IfModule> # error docs ErrorDocument 404 /errors/404.php </VirtualHost>
我面临的问题是,当我去到网站上的目录,我得到一个404错误。 举个例子,这个:
devserver:9090/page.php
去
devserver:9090/page/
但是去一个目录(有一个index.php
):
devserver:9090/dir/
抛出404错误页面。
如果我inputdevserver:9090/dir/index.php
我得到devserver:9090/dir/index/
和我想要的内容出现…
任何人都可以帮我用我的重写规则?
注意
看到我的答案在下面
50分给任何能够解释这个答案的人。 我开始了赏金,然后find我的答案,但仍然在学习,所以任何好的技巧可以值得+50。
也许有人会为这个特殊情况得到一个更详细的答案,但是作为一个更一般的build议,你可以使用RewriteLog
和RewriteLogLevel
指令来获得关于哪个规则被处理的细节信息,以及重写的结果是什么。
有了这些信息,您就可以find缺less的规则,或者至less向我们发送日志输出以获得更多详细信息。
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
我改变了这个:
Options Indexes FollowSymLinks Includes
对此:
Options Indexes FollowSymLinks MultiViews
现在它按预期工作…这是我去除PHP扩展的规则:
<Directory "/opt/lampstack/apache2/htdocs/devserver"> Options Indexes FollowSymLinks Includes AllowOverride None Order allow,deny Allow from all </Directory> <IfModule rewrite_module> RewriteEngine ON # remove PHP extension RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule (.*)/$ /$1.php # add trailing slash to all URLs RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.example.com/$1/ [R=302,L] </IfModule>