Html .HTC访问规则/州/市/

Html .HTC访问规则/州/市/,html,.htaccess,mod-rewrite,Html,.htaccess,Mod Rewrite,这需要一点解释,所以我希望我不会失去这里的每一个人 我需要得到如下的东西: 变成: 通过使用以下两条规则,我能够实现这一点: 重写规则^[A-Za-z0-9-]+/?$cities.html?状态=$1重写规则 ^[A-Za-z0-9-]+/[A-Za-z0-9-]+/?$results.html?州=$1,市=$2 问题是,在后端,由于第二条重写规则,某些代码在某个地方被破坏。这与根据另一个选择的结果填充一个选择框有关,但我认为这并不重要。我认为问题在于我对/州/市的修改过于广泛 这是我的

这需要一点解释,所以我希望我不会失去这里的每一个人

我需要得到如下的东西:

变成:

通过使用以下两条规则,我能够实现这一点:

重写规则^[A-Za-z0-9-]+/?$cities.html?状态=$1重写规则 ^[A-Za-z0-9-]+/[A-Za-z0-9-]+/?$results.html?州=$1,市=$2

问题是,在后端,由于第二条重写规则,某些代码在某个地方被破坏。这与根据另一个选择的结果填充一个选择框有关,但我认为这并不重要。我认为问题在于我对/州/市的修改过于广泛

这是我的完整修改版for security.htaccess文件的副本:

IndexIgnore *
AddHandler application/x-httpd-php5 .html .htm

RewriteRule ^([A-Za-z0-9-]+)/?$ cities.html?state=$1
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ results.html?state=$1&city=$2

<Files .htaccess>
order allow,deny
deny from all
</Files>

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

<IfModule mod_suphp.c>
 suPHP_ConfigPath /home/USER
<Files php.ini>
 order allow,deny
 deny from all
</Files>
代码是非常复杂的,而且是别人的代码。几个小时后,我无法涉过他们所有的东西,甚至无法接近我可以在他们那边改变的东西来让事情运转起来

有没有人知道我可以做些什么来避免这个问题?我实际上只有3.html文件,我正在将前端代码导入其中,所以我尝试了类似于

我的规则


同样,只使用文件而不是文件匹配。我想到的一切都会以这样或那样的方式破坏其他东西或整个网站。

首先:我hostgator不会启用或授予您重写日志的权限;ii您的suPHP配置有语法错误,hostgator几乎肯定会在其自己的根/vhost配置中执行spme以及.htacess/php.ini拒绝。但是,我将重点介绍mod_rewrite元素:

RewriteEngine On

RewriteRule ^([A-Za-z0-9-]+)/?$ cities.html?state=$1
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ results.html?state=$1&city=$2

RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
我还假设在启用了重写引擎的子目录中没有任何.htaccess文件,因为这些文件可能在“按目录重写优先规则”下抢占

规则3是一个简单的域重定向器。规则4非常严格:将任何不是现有文件或目录的URI重定向到当前目录中的index.php,但保留查询字符串不变

规则1和2是你的新规则。正如Mike所说,您应该包括[L],但由于cities.html和results.html文件存在,因此无论如何都不会匹配

我很好奇为什么URI中的尾部slach是可选的。最好决定并解决这个问题

问题在于,1和2的匹配标准是两个广泛的标准,并且选择了用于通用catchall 4的URI。您需要将其锁定以使它们相互排斥。其中一个原因是挖掘hostgator提供的访问日志,以找到应用程序期望的标准URI,并检查其中是否有与1或2匹配的URI—但是,由于大多数都会包含一个。情况可能并非如此。但是检查一下

另一个问题是现有脚本是否使用绝对或相对引用,例如在任何输出HTML中。这里是浏览器要求的http://www.example.com/texas/houston 说,因此将寻找http://www.example.com/texas/images/myimage.png 它与1、2或3不匹配,因此被4捕获并传递到/index.php。同样的CSS文件等。因此它们不会404和index.php会变得混乱,并发送一些默认响应,这将使浏览器无法理解

但是,再次分析本例中的访问日志或与推荐人的USIhttp://www.example.com/texas/houston 我会告诉你这是不是真的

如果您的应用程序使用标准子目录,那么您可能可以通过规则3.1解决此问题,该规则类似于

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1/$2                -f
RewriteRule .*?(images|css|styles)/(.+)  $1/$2 [L]

尽管详细信息将取决于应用程序的其余部分。

我可以通过将相关的.htaccess条目更改为以下内容来解决此问题:

重新启动发动机 重写规则^[A-Za-z0-9-]+/?$cities.html?状态=$1 重写cond%{REQUEST_URI}^/报名/ 重写规则^[A-Za-z0-9-]+/[A-Za-z0-9-]+/?$results.html?州=$1,市=$2 RewriteCond%{HTTP_HOST}^example.com 重写规则。*$1[R=301,L] 重写cond%{REQUEST_FILENAME}-F 重写cond%{REQUEST_FILENAME}-D 重写规则。index.php[L]

增加的内容是:

重写cond%{REQUEST_URI}^/报名/


HostGator能够在某个地方的日志中发现问题/注册,但从未发现他们能够查看的日志,但我认为这是我无法访问的日志。

添加[L]标志最后一条规则,不进一步处理:重写规则^[a-Za-z0-9-]+/?$cities.html?状态=$1[L]打开重写日志。很可能很明显,您正在重写的请求不应该重写。这些都是非常广泛的重写规则。@derobert,我试着按照你的建议打开日志记录,但它给了我500个内部服务器错误。@ScottRowley:检查你的错误日志重写日志不会给你500个错误。@derobert:我跟踪了我的错误日志并点击了几次刷新,但没有出现新的错误。