.htaccess重写以允许目录或无目录
我有一个重写规则,它为URL添加了一个.php扩展名 输入的Url如下所示:.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
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
?