我正在尝试从URL中删除文件夹而我这样做了,但问题是当我访问domain.com时它显示错误500,但如果我添加domain.com/index.php它将起作用。
RewriteEngine On
RewriteBase /insta/member/
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+insta/member/pages/([^\s]+) [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^insta/member/pages)^(.*)$ /insta/member/pages/$1 [L,NC]
答案 0 :(得分:0)
这不是我的驾驶室,但我很确定你需要:
DirectoryIndex index.php
在此处找到:
http://www.htaccess-guide.com/directoryindex-uses/
编辑:经过一些对话后,这可能不是问题,而是这里描述的无限循环:RewriteRule creating 500 Internal Server Error
答案 1 :(得分:0)
在这组规则中,看起来请求被视为永远是文件,如果请求文件名不是文件,则它会向其添加.php
。但情况并非总是如此。在apache 2.2 mode_rewrite
REQUEST_FILENAME:匹配请求的文件或脚本的完整本地文件系统路径,如果在引用REQUEST_FILENAME时服务器已经确定了该路径。否则,例如在虚拟主机上下文中使用时,与REQUEST_URI
的值相同
因此,REQUEST_FILENAME可以解析为文件,文件夹或目录
(这可能因其他Web服务或其他apache版本而异)。如果是文件,规则会起作用,否则会失败。例如,//domain.com
将被解析为文档根目录。但是//domain.com/index.php
将被解析为文档根目录中的index.php文件。一般来说,为避免这种混淆,应考虑所有三种可能性。此外,REQUEST_FILENAME
可能是一个文件,没有像//domain.com/my_styles.css
这样的.php。在这种情况下,规则也会失败。
以下规则应该有效
RewriteEngine On
RewriteBase /insta/member/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+insta/member/pages/([^\s]+) [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^insta/member/pages)^(.*)$ /insta/member/pages/$1 [L,NC]
修改强> 第一组规则的解释是它检查请求的已解析文件名部分是否不是目录,链接或文件,“filename.php”是一个文件,它不是以正斜杠结尾,然后将.php添加到请求。
回答关于漂亮网址的评论中的问题:
要实现漂亮的URL,您需要知道应用程序路由。要从查询字符串中删除GET参数,例如?checking=value
,则规则应如下所示
RewriteRule (.*)/checking/(.*)$ $1?checking=$2 [L]
以下结合上述规则
RewriteEngine On
RewriteBase /insta/member/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule (.*)/checking/(.*)$ $1\.php?checking=$2 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1\.php [QSA,L]
以下示例的$_GET
值将为
http://localhost/insta/member/test
array (size=0)
empty
http://localhost/insta/member/test?checking=value
array (size=1)
'checking' => string 'value' (length=5)
http://localhost/insta/member/test/checking/value
array (size=1)
'checking' => string 'value' (length=5)
http://localhost/insta/member/test/checking/value?second=2
array (size=2)
'checking' => string 'value' (length=5)
'second' => string '2' (length=1)
最后,以下是check/ig/value
到check?ig=value
前往check.php?ig=value
的具体规则
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule (.*)/(.*)/(.*)$ $1.\php?$2=$3 [QSA,L]
GET
http://localhost/insta/member/check/ig/value
array (size=1)
'ig' => string 'value' (length=5)