.htaccess重写以允许目录或无目录

.htaccess重写以允许目录或无目录,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我有一个重写规则,它为URL添加了一个.php扩展名 输入的Url如下所示:http://localhost/Home Url的读取方式如下:http://localhost/home.php 我遇到的问题是,某些URL可能如下所示: http://localhost/sub/123 我应该解释一下,这实际上不是一个子目录。sub部分是文件,123用作get变量。这样看起来更干净 如果发生这种情况,您将得到500个错误 这就是目前的情况 #add php extension RewriteCon

我有一个重写规则,它为URL添加了一个.php扩展名

输入的Url如下所示:
http://localhost/Home

Url的读取方式如下:
http://localhost/home.php

我遇到的问题是,某些URL可能如下所示:

http://localhost/sub/123

我应该解释一下,这实际上不是一个子目录。
sub
部分是文件,
123
用作get变量。这样看起来更干净

如果发生这种情况,您将得到500个错误

这就是目前的情况

#add php extension
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php
以下是我尝试过但不起作用的方法

#add php extension
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)|(.*)/(.*)$ $1.php

使用以下命令更改代码以解决您的问题:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteCond %{REQUEST_URI} !^/(phpscripts|js)/ [NC]
RewriteRule ^([^/]*)(?:/(.*?|))?/?$ /$1.php?$2 [L]

使用以下命令更改代码以解决您的问题:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteCond %{REQUEST_URI} !^/(phpscripts|js)/ [NC]
RewriteRule ^([^/]*)(?:/(.*?|))?/?$ /$1.php?$2 [L]

好的,新问题。如果子文件夹是
gig
,我如何才能使用此规则。这对我的要求非常有效,但现在遇到了一个我忽略的新问题。有一些子文件夹是由JavaScripts访问的,因此您希望仅对URI(如“/gig/User”或
/gig/about
)应用上述规则?是的,或者不将该规则应用于phpscript或js文件夹中的任何内容。事实上,另一种选择会更好,因为我的理解是,您的JS文件使用相对路径。你能尝试添加
RewriteCond%{REQUEST\u FILENAME}吗-f
-d
条件之前,查看这是否有帮助。如果您使用的是相对路径,那么我建议使用绝对路径,即从
/
http://
开始,好吧,我已经添加了,但没有效果。是否有一个简单的规则可以将
phpscript
js
排除在规则之外?好的,新问题。如果子文件夹是
gig
,我如何才能使用此规则。这对我的要求非常有效,但现在遇到了一个我忽略的新问题。有一些子文件夹是由JavaScripts访问的,因此您希望仅对URI(如“/gig/User”或
/gig/about
)应用上述规则?是的,或者不将该规则应用于phpscript或js文件夹中的任何内容。事实上,另一种选择会更好,因为我的理解是,您的JS文件使用相对路径。你能尝试添加
RewriteCond%{REQUEST\u FILENAME}吗-f
-d
条件之前,查看这是否有帮助。如果您使用的是相对路径,那么我建议使用绝对路径,即从
/
http://
开始,好吧,我已经添加了,但没有效果。是否有一个简单的规则可以从规则中排除
phpscript
js